[Rd] data() misbehaving inside a function

Kurt Hornik Kurt.Hornik at wu-wien.ac.at
Fri Oct 17 09:35:49 MEST 2003


>>>>> Martin Maechler writes:

>>>>> "KH" == Kurt Hornik <Kurt.Hornik at wu-wien.ac.at>
>>>>>     on Fri, 17 Oct 2003 09:04:40 +0200 writes:

>>>>> Peter Dalgaard writes:
>>> David James <dj at research.bell-labs.com> writes:
>>>> Calls of the form data(package = pkg) inside a function 
>>>> incorrectly fail ("pkg" is a local variable).  For instance,
>>>> 
>>>> foo <- function(pkg) data(package = pkg)
>>>> foo("base")
>>>> Error in .find.package(package, lib.loc, verbose = verbose) :
>>>> none of the packages were found

>>> This is pretty much unavoidable if you want a function to accept
>>> unquoted names. It's not in principle different from

>>> women <- "airquality"
>>> data(women)

>>> not being equivalent to data("airquality"). Some functions (library(),
>>> require(), demo()) have a character.only argument to prevent it, and I
>>> suppose we should consider putting it on help() and data() as well.

KH> Or get rid of non-standard evaluation and educate users to use quoted
KH> strings where strings should be used.

> and infuriate those who know and used the S language for more than 15
> years, where help(help) has always worked?

I would think that these users either click themselves to happiness, or
use ? because it is shorter.

> Definitely not worth the pain (I *know* I'd hear ... comments from
> them!)!  I'd go for adding `character.only'.

Actually, I do think it is worth the pain.  The way I understand it, we
have a strategic decision to gradually eliminate non-standard eval.

-k



More information about the R-devel mailing list