请有人请指出我为什么以下示例不起作用:
df <- data.frame(ex =rep(1,5))
sample.fn <- function(var1) with(df, mean(var1))
sample.fn(ex)
似乎我使用错误的语法将with
组合在一个函数中。
谢谢,
答案 0 :(得分:1)
这就是我学习使用的意思&#34; [&#34; (实际上&#34; [&#34):
> df <- data.frame(ex =rep(1,5))
> sample.fn <- function(var1) mean(df[[var1]])
> sample.fn('ex')
[1] 1
您不能使用不带引号的ex
,因为没有名为&#39; ex&#39;的对象,至少不在您拨打sample.fn
的全球环境中。 &#39; EX&#39;是仅在df
- 数据框环境中的名称,只有df
本身是&#34;可见&#34;调用sample.fn
- 函数时。
出于兴趣,我尝试使用with.default
函数用于构建函数的方法,该函数以您期望的方式获取不带引号的表达式参数:
samp.fn <- function(expr) mean(
eval(substitute(expr), df, enclos = parent.frame())
)
samp.fn(ex)
#[1] 1
它不是一个非常有用的功能,因为只有在有一个名为“df”的数据帧时它才适用。在parent.frame()中。并且错误地声称帮助页面上有警告而道歉。正如@rawr所指出的那样,关于使用依赖于非标准评估的函数的警告会出现在subset
页面上。