将多个参数传递给函数内部的data.table [英] Passing multiple arguments to data.table inside a function

查看:50
本文介绍了将多个参数传递给函数内部的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. 汇总子总计和总计data.table
  2. 使用data.table i和j函数中的参数

旧的常见问题解答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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆