r - 在使用过滤器时使用 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))]
不起作用。
解决方案
一个原因可能是因为当您定义时,col1 <- "B"
您正在将值分配给B
全局col1
环境,因此该函数get
将查找B
未定义的值。
推荐阅读
- oauth-2.0 - Oauth 授权代码流是否会生成服务主体登录事件?
- python - 将列值拆分为以逗号分隔的值列表
- javascript - 从球体对象的中心开始绘制线条和文本 [ThreeJS]
- discord.py - 如何在任务中使用 guild.id
- flutter - 如何在颤动中动态更改卡片列表的文本颜色?
- javascript - 如果数组中的值匹配,则检查搜索输入并显示响应
- azure - Azure 容器部署 - “操作失败,状态为 200:资源状态失败”
- tidal-scheduler - Tidal Workload 自动化:Fault Monitor 失去了与 Master 的连接
- google-cloud-platform - 如何在 Dialogflow CX 中读取 webhook 响应
- javascript - 通过 Google Apps 脚本附加数据时未捕获的错误