如果我在使用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))}
答案 0 :(得分:2)
library
,require
,example
以及其他一些函数可以使用带引号和不带引号:
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
应该是默认的),我看不到任何优点(好的,你可以在不带引号的版本中使用制表完成)。