我想创建一个函数来计算子集数据集中某个变量的值,但是我的函数没有按预期工作。
selected_cyl_6 <- subset(mtcars, mtcars$cyl==6)
selected_cyl_4 <- subset(mtcars, mtcars$cyl==4)
count <- function(group,variable) {
sum(group$variable == 4)
}
count(selected_cyl_6,gear)
# [1] 0
答案应该是4.但是,如果我直接使用总和,我会得到正确答案
sum(selected_cyl_6$gear==4)
# [1] 4
另一个例子
count(selected_cyl_4,gear)
# [1] 0
sum(selected_cyl_4$gear==4)
# [1] 8
我做错了什么?
答案 0 :(得分:2)
这是在您的函数中使用美元符号快捷方式。请参阅fortunes::fortune(343)
。
一些选项,使用括号表示法。
首先,使用标准评估时,您可以在使用函数时将变量名称用引号括起来。
count <- function(group, variable) {
sum(group[[variable]] == 4)
}
count(selected_cyl_6, "gear")
如果您想使用非标准评估而不需要引号,则可以在函数中使用deparse
substitute
。
count <- function(group, variable) {
sum(group[[deparse(substitute(variable))]] == 4)
}
count(selected_cyl_6, gear)