【发布时间】:2012-09-25 23:49:22
【问题描述】:
我正在编写一个函数 foo(..., lev) 基于包 limma (of bioconductor) 的 makeContrasts 函数:
makeContrasts(..., contrasts=NULL, levels)
我想将 foo 'as-is' 的 ... 参数传递给 makeContrasts。这是我的代码:
foo = function(..., lev) {
e = substitute(list(...))
makeContrasts(e[[2]], levels=lev)
}
foo(a + b, design)
我使用 e[[2]] 的原因是 e 将是 list(a+b) 而 e[[1]] 是 list 但 e [[2]] 是我需要的:a + b
但问题是传递给 makeContrast 的实际参数是 e[[2]] 而不是 a + b。 那么该怎么办呢?
完整的参数赋值如下:
ct = factor(c("a","b"))
design = model.matrix(~0+ct)
colnames(design)=levels(ct)
makeContrasts(a+b,levels=design) # It works
foo(a+b, design) # Does not work
【问题讨论】:
-
你为什么首先将
...包裹在list中? -
你能添加你的函数替代代码吗?如果要返回函数,请在名称后添加 () 以调用它。
-
@sgroh:
substitute是 R 中的原语。 -
对不起,有效的解决方案是你在回答中所说的:)
-
仍然没有工作示例。如果我们要进一步研究,需要“a”、“b”和“设计”的例子。您似乎认为表达式
a+b将在内部由e[[1]] + e[[2]]表示。那是错误的。函数表达式的第一个元素是函数名,在本例中为“+”,而您可能希望 e[[3]] 成为参数列表中的第二项。
标签: r