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.