这个R功能出了什么问题?

时间:2017-01-05 01:21:40

标签: r

我想定义一个简单的函数来过滤数据框,类似于您可能在SPSS中使用“选择案例”菜单选项执行的操作。

如果我只想保留q3a为1的情况:subset(df, q3a==1),我将在控制台中输入以使用子集函数对其进行过滤。这将运行没有问题,并返回一个数据框,仅包括q3a为1的情况。

但是,当我使用以下函数时,出现错误:

filter <- function(frame, var, val) {
    newFrame <- subset(frame, var==val)
    return(newFrame)
}

当我尝试运行filter(df, q3a, 1)时,R会向我发出以下错误:Error in eval(expr, envir, enclos) : object 'q3a' not found

我看不出这里有什么问题。似乎函数应该直接将参数传递给子集函数,但显然没有发生。

1 个答案:

答案 0 :(得分:0)

大多数内置R函数将采用不带引号的参数,如q3a,并使其行为类似于字符串。

要实现相同的功能,请尝试以下方法:

filter <- function(frame, var, val) {
    return(frame[eval(substitute(var), frame)==val, ])
}

请注意,我使用的是不同的方法,而不是使用非标准评估and can make things very complicatedsubset