相关疑难解决方法(0)

在函数中使用data.table i和j参数

我正在尝试编写一些包装器函数来减少代码重复data.table.

这是一个使用的例子mtcars.首先,设置一些数据:

library(data.table)
data(mtcars)
mtcars$car <- factor(gsub("(.*?) .*", "\\1", rownames(mtcars)), ordered=TRUE)
mtcars <- data.table(mtcars)
Run Code Online (Sandbox Code Playgroud)

现在,我通常会写这个以获得按组计算的总结.在这种情况下,我分组car:

mtcars[, list(Total=length(mpg)), by="car"][order(car)]

      car Total
      AMC     1
 Cadillac     1
   Camaro     1
...
   Toyota     2
  Valiant     1
    Volvo     1
Run Code Online (Sandbox Code Playgroud)

复杂的是,因为参数ij在框架中进行评估,如果你想传入变量data.table,就必须使用eval(...)它们:

这有效:

group <- "car"
mtcars[, list(Total=length(mpg)), by=eval(group)]
Run Code Online (Sandbox Code Playgroud)

但现在我想通过相同的分组变量来排序结果.我无法得到以下任何变体给我正确的结果.注意我总是得到一行结果,而不是有序集.

mtcars[, list(Total=length(mpg)), by=eval(group)][order(group)]
   car Total
 Mazda     2
Run Code Online (Sandbox Code Playgroud)

我知道为什么:它是因为group是在而parent.frame不是框架中进行评估data.table.

我怎样才能group在上下文中进行评估data.table

更一般地说,我如何在函数内部使用它?我需要以下函数来给我所有结果,而不仅仅是第一行数据:

tableOrder <- function(x, group){ …
Run Code Online (Sandbox Code Playgroud)

r data.table

19
推荐指数
3
解决办法
6442
查看次数

标签 统计

data.table ×1

r ×1