将多个参数传递给函数内部的data.table [英] Passing multiple arguments to data.table inside a function
本文介绍了将多个参数传递给函数内部的data.table的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是我想要的 data.table
的输出.
library(data.table)
dt_mtcars <- as.data.table(mtcars)
## desired output ----
dt_mtcars[mpg >20
, .(mean_mpg = mean(mpg)
,median_mpg = median(mpg))
, .(cyl, gear)]
cyl gear mean_mpg median_mpg
1: 6 4 21.000 21.00
2: 4 4 26.925 25.85
3: 6 3 21.400 21.40
4: 4 3 21.500 21.50
5: 4 5 28.200 28.20
我想通过将参数传递给函数来获得输出.
I want to get the output by passing arguments to a function.
processFUN <- function(dt, where, select, group){
out <- dt[i=eval(parse(text = where))
,j=eval(parse(text = select))
,by=eval(parse(text = group))]
return(out)
}
report <- processFUN(dt_mtcars
,where= "mpg > 20"
,select= ".(mean_mpg = mean(mpg), median_mpg = median(mpg))"
,group= ".(cyl, gear)")
但是,我收到一条错误消息.
However, I get an error message.
Error in .(cyl, gear) : could not find function "."
推荐答案
或将 eval
与替代
一起使用:
library(data.table) #Win R-3.5.1 x64 data.table_1.12.2
dt_mtcars <- as.data.table(mtcars)
processFUN <- function(dt, where, select, group) {
out <- dt[i=eval(substitute(where)),
j=eval(substitute(select)),
by=eval(substitute(group))]
return(out)
}
processFUN(dt_mtcars, mpg>20, .(mean_mpg=mean(mpg), median_mpg=median(mpg)), .(cyl, gear))
我可以找到的一些最早的参考文献
Some of the earliest references that I can find are
旧的常见问题解答1.6包含对此的引用: http://datatable.r-forge.r-project.org/datatable-faq.pdf
The old faq 1.6 contains reference to this: http://datatable.r-forge.r-project.org/datatable-faq.pdf
这篇关于将多个参数传递给函数内部的data.table的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文