Mia*_*Cai 4 r function data.table
我已经搜寻了这个答案几个小时。很多人都问过类似的问题,但是我没有找到一个足够简单的问题或一个简单的答案。这是我的方法:
假设我想在中进行一个简单的分组data.table:
library(data.table)
mtcars = data.table(mtcars)
mtcars[,sum(mpg), gear]
# Here are the results
# gear V1
#1: 4 294.4
#2: 3 241.6
#3: 5 106.9
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用自定义函数执行此操作:
zz = function(data, var, group){
return(data[,sum(var), group])
}
zz(mtcars, mpg, gear)
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:
eval(bysub,parent.frame(),parent.frame())中的错误:找不到对象“齿轮”
我试过substitute,eval,quote,和其他解决方案,但没有人的作品。我想知道是否有人可以对此提供更直接的解决方案和解释。
谢谢,万圣节快乐!
如果我们使用不带引号的参数,substitute并eval审视你们
zz <- function(data, var, group){
var <- substitute(var)
group <- substitute(group)
setnames(data[, sum(eval(var)), by = group],
c(deparse(group), deparse(var)))[]
# or use
# setnames(data[, sum(eval(var)), by = c(deparse(group))], 2, deparse(var))[]
}
zz(mtcars, mpg, gear)
# gear mpg
#1: 4 294.4
#2: 3 241.6
#3: 5 106.9
Run Code Online (Sandbox Code Playgroud)
虽然并不完美,但这个...论点可能会有所帮助:
zz = function(dt, ...){
return(dt[...])
}
zz(mtcars, , sum(mpg), gear)
gear V1
1: 4 294.4
2: 3 241.6
3: 5 106.9
Run Code Online (Sandbox Code Playgroud)