我想定义一个简单的函数来过滤数据框,类似于您可能在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
。
我看不出这里有什么问题。似乎函数应该直接将参数传递给子集函数,但显然没有发生。
答案 0 :(得分:0)
大多数内置R函数将采用不带引号的参数,如q3a
,并使其行为类似于字符串。
要实现相同的功能,请尝试以下方法:
filter <- function(frame, var, val) {
return(frame[eval(substitute(var), frame)==val, ])
}
请注意,我使用的是不同的方法,而不是使用非标准评估and can make things very complicated的subset
。