我想写一个自定义函数的包装,它需要一些向量作为输入(如:mtcars$hp
,mtcars$am
等)将输入作为数据帧名称(如data
参数,例如:mtcars
)和变量名称(如:hp
和am
),如大多数标准函数一样。`With`使用内部函数(包装)
但我有一些问题,我提出了“演示”功能(大约mean
的包装不起作用
代码:
f <- function(x, data=NULL) {
if (!missing(data)) {
with(data, mean(x))
} else {
mean(x)
}
}
运行针对课程的载体作品:
> f(mtcars$hp)
[1] 146.69
但with
不幸失败:
> f(hp, mtcars)
Error in with(d, mean(x)) : object 'hp' not found
虽然在全球环境/没有我的自定义函数作品的权利:
> with(mtcars, mean(hp))
[1] 146.69
我试图做一些实验substitute
,deparse
和其他人,但没有成功。任何暗示都会受到欢迎!
看看@Hadley Wickham的wiki文章:https://github.com/hadley/devtools/wiki /评估 – Andrie
它不应该是'f(hp,mtcars)'? – James
您可能想要探索的另一个选项是使用公式,因此您可以稍微区别它 - foo(〜hp,mtcars) - 然后使用像model.frame这样的东西来获取值。 – Spacedman