首页 > 解决方案 > 在使用过滤器时使用 get() 按列分组在某些情况下不起作用

问题描述

我有一个 data.table 我想过滤和聚合其中一些列分组是固定的,一些来自函数参数。这种组合会产生错误消息。

这是一个简单且可重复的示例

dt <- data.table(A = rnorm(10), 
             B = sample(c("1", "2"), 10, replace = TRUE), 
             C = sample(c("1", "2"), 10, replace = TRUE))
col1 <- "B"

dt[B == "1", mean(A), by = .(get(col1))]      # works
dt[B == "1", mean(A), by = .(C, get(col1))]   # does not work
dt[, mean(A), by = .(C, get(col1))]           # works
dt[B == "1", mean(A), by = c("C", col1)]      # works and returns the intended result
dt[B == "1"][, mean(A), by = .(C, get(col1))] # works and returns the intended result

我不明白为什么dt[B == "1", mean(A), by = .(C, get(col1))]在链接时dt[B == "1"][, mean(A), by = .(C, get(col1))]不起作用。

标签: rdata.table

解决方案


一个原因可能是因为当您定义时,col1 <- "B"您正在将值分配给B全局col1环境,因此该函数get将查找B未定义的值。


推荐阅读