我在写一个调用另一个函数的函数(例如lm
),并且我想使用省略号将其他 参数传递给它(...
)。但是,在全球环境中要使用的数据不是 ,而是在列表中。小例子:编写一个包装函数,以成功通过省略号(...)添加参数(如子集)
L <- list(data = chickwts, other = 1:5)
wrapper <- function(list, formula = NULL, ...){
if (missing(formula)) formula <- formula(weight~feed)
lm(formula, data = list$data, ...)
}
wrapper(L, subset = feed != "casein") #fails
我可以使它工作使用attach
但我敢肯定有通过指定评估框架做的更有效的方法...?
wrapper2 <- function(list, formula = NULL, ...){
if (missing(formula)) formula <- formula(weight~feed)
attach(list$data)
m <- lm(formula, ...)
detach(list$data)
return(m)
}
wrapper2(L, subset = feed != "casein") #works
我以前使用的另一种解决方案是使用list(...)
,并处理手动参数,但是在实际情况下,将是不实际的。
我可以看到这是相当基本的,但我找不到解决方案。我们将赞赏对特定问题的任何建议,以及对一般环境的良好概念性解释的链接。
的'model.frame'代码(这是'lm'在你的例子调用)是可怕的。我不建议让它工作,而是建议事先将数据分组。 –
这不是重点,这只是一个真实情况的简单例子(这更复杂)。问题是一样的:如何将参数从'...'传递给另一个函数内的函数,而不需要使用'attach(list $ data)'。而不是'subset',它可以是任何在数据中使用变量名的任意参数。 – sparrow
问你真实的问题,而不是假装。 –