不能与R结合使用

时间:2014-11-10 19:10:36

标签: r function with-statement

请有人请指出我为什么以下示例不起作用:

df        <- data.frame(ex =rep(1,5))
sample.fn <- function(var1) with(df, mean(var1))
sample.fn(ex)

似乎我使用错误的语法将with组合在一个函数中。

谢谢,

1 个答案:

答案 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页面上。