【问题标题】:R: Running example of package function: strange behaviorR:包函数的运行示例:奇怪的行为
【发布时间】:2013-06-30 13:52:44
【问题描述】:

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

> 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))}

【问题讨论】:

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

标签: r package argument-passing function-call


【解决方案1】:

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 应该是默认值)而且我看不到任何优点(好的,您可以在未引用的版本中使用制表符完成)。

【讨论】:

  • 感谢您对可以带引号和不带引号运行的函数的说明!我一直想知道为什么libraryrequire 都可以使用,但我从来没有深究过!
猜你喜欢
  • 2017-09-14
  • 2015-12-06
  • 1970-01-01
  • 2015-06-26
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
相关资源
最近更新 更多