[R] Subset with missing argument within a function

William Dunlap wdunlap at tibco.com
Thu Feb 4 18:19:20 CET 2016


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