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:
> 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]]
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]]