R's subscripting operators do not "guess" the value of a missing argument: a missing k'th subscript means seq_len(dim(x)[k]). I bet that you use syntax like x[,1] (the entire first column of x) all the time and that you don't want this syntax to go away.
Some languages use a placeholder like '.' or '*' to do this. Perhaps S should have, but it is now late to make such a change. Bill Dunlap TIBCO Software wdunlap tibco.com On Thu, Feb 4, 2016 at 11:23 PM, Stefano de Pretis <ste.depo....@gmail.com> wrote: > Thanks Bill, > > This is more clear. > > In any case, I find very inappropriate that a programming language tries > to guess the value of a missing argument. It is unfair towards code > developers and it promotes the production of bugged piece of software. > > I hope R will revise its policies sooner or later. > > Thanks for the discussion, > > Stefano > > > > > > > > 2016-02-04 18:19 GMT+01:00 William Dunlap <wdun...@tibco.com>: > >> The "missingness" of an argument gets passed down through nested function >> calls. E.g., >> fOuter <- function(x) c(outerMissing=missing(x), innerMissing=fInner(x)) >> fInner <- function(x) missing(x) >> fInner() >> #[1] TRUE >> fOuter() >> #outerMissing innerMissing >> # TRUE TRUE >> It is only when a function evaluates an argument that you get a message >> like 'argument is missing, with no default'. ('[' checks for missingness >> before >> evaluating a subscript argument so it will not give that error.) >> >> >> Bill Dunlap >> TIBCO Software >> wdunlap tibco.com >> >> On Thu, Feb 4, 2016 at 7:47 AM, Stefano de Pretis <ste.depo....@gmail.com >> > wrote: >> >>> Hi Petr, >>> >>> Thank you for your answer. >>> >>> I'm not sure how the empty index reflects what I'm showing in my example. >>> If my function was >>> >>> emptySubset <- function(vec) vec[] >>> >>> I would then agree that this was the case. But I think it's different: >>> I'm >>> specifically telling my function that it should have two arguments ("vec" >>> and "ix") >>> >>> subsettingFun <- function(vec, ix) vec[ix] >>> >>> and I guess why, within the function, it does not happen what happens on >>> the command line: >>> >>> > ix >>> Error: object 'ix' not found >>> > letters[ix] >>> Error: object 'ix' not found >>> >>> My "expectation" came from a matter of coherence, but probably I'm still >>> missing something. >>> >>> Regards, >>> >>> Stefano >>> >>> >>> >>> 2016-02-04 15:39 GMT+01:00 PIKAL Petr <petr.pi...@precheza.cz>: >>> >>> > Hi >>> > >>> > Help page for ?"[" says >>> > >>> > An empty index selects all values: this is most often used to replace >>> all >>> > the entries but keep the attributes. >>> > >>> > and actually you function construction works with empty index >>> > >>> > > x<-c(1,2,5) >>> > > letters[x] >>> > [1] "a" "b" "e" >>> > > letters[] >>> > [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" >>> "q" >>> > "r" "s" >>> > [20] "t" "u" "v" "w" "x" "y" "z" >>> > >>> > It is sometimes useful not "expect" the program behavior but "inspect" >>> why >>> > it behaves differently. >>> > >>> > If you want your function to throw error when some arguments are >>> missing >>> > you need to do the check yourself and not rely on programming language. >>> > >>> > And BTW I did not know an answer before I inspected docs. >>> > >>> > Cheers >>> > Petr >>> > >>> > >>> > > -----Original Message----- >>> > > From: R-help [mailto:r-help-boun...@r-project.org] On Behalf Of >>> Stefano >>> > > de Pretis >>> > > Sent: Thursday, February 04, 2016 11:00 AM >>> > > To: r-help@r-project.org >>> > > Subject: [R] Subset with missing argument within a function >>> > > >>> > > Hi all, >>> > > >>> > > I'm guessing what's the rationale behind this: >>> > > >>> > > > subsettingFun <- function(vec, ix) vec[ix] >>> > > > subsettingFun(letters, c(1,2,5)) >>> > > [1] "a" "b" "e" >>> > > > subsettingFun(letters) >>> > > [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" >>> > > "q" >>> > > "r" "s" >>> > > [20] "t" "u" "v" "w" "x" "y" "z" >>> > > >>> > > If the argument "ix" is missing, I'm expecting an error not to return >>> > > the >>> > > variable "vec" as it is. >>> > > >>> > > I think this is VERY dangerous and does not help the development of >>> > > reliable code and the debugging. >>> > > >>> > > Cheers, >>> > > >>> > > Stefano >>> > > >>> > > *Center for Genomic Science of IIT@SEMM* >>> > > >>> > > Stefano de Pretis, PhD >>> > > >>> > > *Postdoctoral fellow * >>> > > >>> > > [[alternative HTML version deleted]] >>> > > >>> > > ______________________________________________ >>> > > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >>> > > https://stat.ethz.ch/mailman/listinfo/r-help >>> > > PLEASE do read the posting guide http://www.R-project.org/posting- >>> > > guide.html >>> > > and provide commented, minimal, self-contained, reproducible code. >>> > >>> > ________________________________ >>> > Tento e-mail a jakékoliv k němu připojené dokumenty jsou důvěrné a jsou >>> > určeny pouze jeho adresátům. >>> > Jestliže jste obdržel(a) tento e-mail omylem, informujte laskavě >>> > neprodleně jeho odesílatele. Obsah tohoto emailu i s přílohami a jeho >>> kopie >>> > vymažte ze svého systému. >>> > Nejste-li zamýšleným adresátem tohoto emailu, nejste oprávněni tento >>> email >>> > jakkoliv užívat, rozšiřovat, kopírovat či zveřejňovat. >>> > Odesílatel e-mailu neodpovídá za eventuální škodu způsobenou >>> modifikacemi >>> > či zpožděním přenosu e-mailu. >>> > >>> > V případě, že je tento e-mail součástí obchodního jednání: >>> > - vyhrazuje si odesílatel právo ukončit kdykoliv jednání o uzavření >>> > smlouvy, a to z jakéhokoliv důvodu i bez uvedení důvodu. >>> > - a obsahuje-li nabídku, je adresát oprávněn nabídku bezodkladně >>> přijmout; >>> > Odesílatel tohoto e-mailu (nabídky) vylučuje přijetí nabídky ze strany >>> > příjemce s dodatkem či odchylkou. >>> > - trvá odesílatel na tom, že příslušná smlouva je uzavřena teprve >>> > výslovným dosažením shody na všech jejích náležitostech. >>> > - odesílatel tohoto emailu informuje, že není oprávněn uzavírat za >>> > společnost žádné smlouvy s výjimkou případů, kdy k tomu byl písemně >>> zmocněn >>> > nebo písemně pověřen a takové pověření nebo plná moc byly adresátovi >>> tohoto >>> > emailu případně osobě, kterou adresát zastupuje, předloženy nebo jejich >>> > existence je adresátovi či osobě jím zastoupené známá. >>> > >>> > This e-mail and any documents attached to it may be confidential and >>> are >>> > intended only for its intended recipients. >>> > If you received this e-mail by mistake, please immediately inform its >>> > sender. Delete the contents of this e-mail with all attachments and its >>> > copies from your system. >>> > If you are not the intended recipient of this e-mail, you are not >>> > authorized to use, disseminate, copy or disclose this e-mail in any >>> manner. >>> > The sender of this e-mail shall not be liable for any possible damage >>> > caused by modifications of the e-mail or by delay with transfer of the >>> > email. >>> > >>> > In case that this e-mail forms part of business dealings: >>> > - the sender reserves the right to end negotiations about entering >>> into a >>> > contract in any time, for any reason, and without stating any >>> reasoning. >>> > - if the e-mail contains an offer, the recipient is entitled to >>> > immediately accept such offer; The sender of this e-mail (offer) >>> excludes >>> > any acceptance of the offer on the part of the recipient containing any >>> > amendment or variation. >>> > - the sender insists on that the respective contract is concluded only >>> > upon an express mutual agreement on all its aspects. >>> > - the sender of this e-mail informs that he/she is not authorized to >>> enter >>> > into any contracts on behalf of the company except for cases in which >>> > he/she is expressly authorized to do so in writing, and such >>> authorization >>> > or power of attorney is submitted to the recipient or the person >>> > represented by the recipient, or the existence of such authorization is >>> > known to the recipient of the person represented by the recipient. >>> > >>> >>> [[alternative HTML version deleted]] >>> >>> ______________________________________________ >>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >>> https://stat.ethz.ch/mailman/listinfo/r-help >>> PLEASE do read the posting guide >>> http://www.R-project.org/posting-guide.html >>> and provide commented, minimal, self-contained, reproducible code. >> >> >> > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.