【发布时间】:2012-09-21 02:41:10
【问题描述】:
在another question 中,sapply(substitute(...()), as.character) 在函数内部用于获取传递给函数的名称。 as.character 部分听起来不错,但 ...() 到底是做什么的?
substitute 之外的代码无效:
> test <- function(...) ...()
> test(T,F)
Error in test(T, F) : could not find function "..."
更多测试用例:
> test <- function(...) substitute(...())
> test(T,F)
[[1]]
T
[[2]]
F
> test <- function(...) substitute(...)
> test(T,F)
T
【问题讨论】:
-
除此之外,我很好奇为什么
substitute(...)只返回...的第一个元素。 (请注意,test <- function(...) substitute({...}); test(T, F)将以某种方式返回它们。 -
@mnel,如果你在 c 方面比我好(不是一个困难的成就),请查看 */src/main 中的 coerce.c 文件中的函数
substitute,substituteList和do_substitute。他们确实以特殊的方式处理椭圆。 -
@mnel 我不认为
...()为...的元素创建函数。...是一个配对列表,substitute()的第一个参数应该是一个表达式。在表达式中(可用于简单地对事物进行分组。正如substitute所做的只是返回...的解析树,我想知道()是否只是解析器的一个技巧或类似的技巧,以使其以某种方式对...进行分组。正如比尔的电子邮件所示,没有任何函数创建,因为它会显示在生成的解析树中,不是吗? -
我强烈建议不要使用这种结构。曾经。 Bill D. 可能已经发现了一个很棒的偷偷摸摸的把戏,但鉴于它几乎没有记录在案,因此真的不能保证它在所有情况下都能正常工作,或者未来某个 R 核心的 mod 不会破坏它。有时我们为了自己的利益太聪明了 :-(。如果帕特里克“地狱”伯恩斯能证明这一点,我会收回这条评论。:-)
-
substitute(...[])也一样...
标签: r