Stefano de Pretis
2016-Feb-04 15:47 UTC
[R] Subset with missing argument within a function
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:> ixError: 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.pikal at 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-bounces at r-project.org] On Behalf Of Stefano > > de Pretis > > Sent: Thursday, February 04, 2016 11:00 AM > > To: r-help at 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 at SEMM* > > > > Stefano de Pretis, PhD > > > > *Postdoctoral fellow * > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help at 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]]
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.bio at 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.pikal at 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-bounces at r-project.org] On Behalf Of > Stefano > > > de Pretis > > > Sent: Thursday, February 04, 2016 11:00 AM > > > To: r-help at 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 at SEMM* > > > > > > Stefano de Pretis, PhD > > > > > > *Postdoctoral fellow * > > > > > > [[alternative HTML version deleted]] > > > > > > ______________________________________________ > > > R-help at 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 at 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]]
Stefano de Pretis
2016-Feb-05 07:23 UTC
[R] Subset with missing argument within a function
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 <wdunlap at 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.bio at 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.pikal at 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-bounces at r-project.org] On Behalf Of >> Stefano >> > > de Pretis >> > > Sent: Thursday, February 04, 2016 11:00 AM >> > > To: r-help at 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 at SEMM* >> > > >> > > Stefano de Pretis, PhD >> > > >> > > *Postdoctoral fellow * >> > > >> > > [[alternative HTML version deleted]] >> > > >> > > ______________________________________________ >> > > R-help at 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 at 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]]