[R] Subset with missing argument within a function

Stefano de Pretis ste.depo.bio at gmail.com
Fri Feb 5 08:23:14 CET 2016


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



More information about the R-help mailing list