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.