【问题标题】:cannot combine with and functions in R不能与 R 中的 and 函数结合
【发布时间】:2015-01-07 04:33:06
【问题描述】:

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

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

似乎我使用错误的语法将with 组合到一个函数内部。

谢谢,

【问题讨论】:

  • with 的帮助页面特别警告您不要在函数中使用它。学习使用“[”。
  • 错误确实与withwith(df, sample.fn(ex))无关
  • @BondedDust 实际上并没有。当然应该,但要查看Warning,您必须查看?subset

标签: r function with-statement


【解决方案1】:

这就是我学习使用“[”的意思(实际上是“[[”):

> df        <- data.frame(ex =rep(1,5))
> sample.fn <- function(var1) mean(df[[var1]])
> sample.fn('ex')
[1] 1

您不能使用不带引号的ex,因为没有名为“ex”的对象,至少在您调用sample.fn 的全局环境中没有。 'ex' 是仅在 df-dataframe 环境中的名称,并且在调用 sample.fn-function 时只有 df 本身是“可见的”。

出于兴趣,我尝试使用 with.default 函数使用的方法来构建一个函数,该函数以您期望的方式采用未引用的表达式参数:

samp.fn <- function(expr) mean( 
                  eval(substitute(expr), df, enclos = parent.frame())
                               )
samp.fn(ex)
#[1] 1

这不是一个非常有用的函数,因为它只适用于在 parent.frame() 中有一个名为“df”的数据帧时。并为错误地声称帮助页面上有警告表示歉意。正如@rawr 指出的那样,关于使用依赖于非标准评估的函数的警告出现在subset 页面上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多