R:运行包函数的例子:奇怪的行为

时间:2013-06-30 13:52:44

标签: r package argument-passing function-call

如果我在使用example函数时手动输入字符串名称,我真的不明白为什么ls的行为会有所不同。考虑以下功能:

> ls("package:LIM")[1]
[1] "FILERigaAutumn"

如果我运行这样的例子:

> example(ls("package:LIM")[1])
Warning message:
In example(ls("package:LIM")[1]) : no help found for ‘ls("package:LIM")[1]’

似乎没有执行这个例子。 但是当我直接运行它时:

> example("FILERigaAutumn")

我得到了很多输出,并且示例已经执行。

传递的参数类型似乎相同:

> typeof("FILERigaAutumn")
[1] "character"
> typeof( ls("package:LIM")[1])
[1] "character"

有谁知道为什么? 我想在一个包中计算所有示例的运行时间:

for (func in ls("package:LIM")){system.time(example(func))}

1 个答案:

答案 0 :(得分:2)

libraryrequireexample以及其他一些函数可以使用带引号和不带引号:

example(runif)

example("runif")

为了允许不带引号的版本,这些函数通过调用以下函数将第一个参数转换为字符(不进行评估):

deparse(subsitute(x))

导致:

deparse(substitute(ls("package:LIM")[1]))
# [1] "ls(\"package:LIM\")[1]"

要绕过这个(评估参数),你必须使用character.only参数。

example(ls("package:LIM")[1], character.only=TRUE)

恕我直言,这种行为不是很一致(character.only=TRUE应该是默认的),我看不到任何优点(好的,你可以在不带引号的版本中使用制表完成)。