【发布时间】:2012-09-26 02:09:17
【问题描述】:
可能重复:
How to use R's ellipsis feature when writing your own function?
我想知道 R 如何解释 ... 参数?
例如考虑包limma 的makeContrasts(..., contrasts=NULL, levels)。你可以运行:
> require(limma)
> makeContrasts(a + b, b+c, levels=letters[1:3])
Contrasts
Levels a + b b + c
a 1 0
b 1 1
c 0 1
它解释参数a + b, b+c,而a, b 和c 已被定义为R 对象。
我试着做一个类似的功能:
foo = function(...) {
print(typeof(...))
}
> foo(a + b)
Error in typeof(...) : object 'a' not found
所以我真的很困惑什么类型的对象真正传递给makeContrasts?有没有办法修改这个对象?
【问题讨论】:
-
在 SO 上搜索
[r] ellipsis,您会发现许多问题,您可以从中找到答案。 r-intro 和其他文档也有所有这些信息\ -
另外,如果你想让你的函数处理像
limma::makeContrasts这样的参数,输入limma::makeContrasts来看看它的“内部”。 -
谢谢,但我已经完成了你推荐的想法。我关于
a + b是什么类型的问题在任何地方都没有得到解答。 -
这很难回答,因为
a + b有很多东西。它(至少)是:(1)为函数调用makeContrasts(a+b)提供的(但不匹配的)参数; (2) 存储在...特殊对象中的promise 对象之一的表达式槽; (3) 一个“调用”或“语言”对象,例如通过输入quote(a + b)返回的 -
谢谢乔希。最好将其发布为答案,以便我可以将此问题标记为已回答。
标签: r