r - 选择变量中命名的列时,“.SD”中的警告
问题描述
假设我有一个data.table
如下
DT <- data.table(x = rep(c("b", "a", "c"), each = 3), v = c(1, 1, 1, 2, 2, 1, 1, 2, 2), y = c(1, 3, 6), a = 1:9, b = 9:1)
> DT
x v y a b
1: b 1 1 1 9
2: b 1 3 2 8
3: b 1 6 3 7
4: a 2 1 4 6
5: a 2 3 5 5
6: a 1 6 6 4
7: c 1 1 7 3
8: c 2 3 8 2
9: c 2 6 9 1
我有一个sl <- c("a","b")
选择要计算的列的变量rowSums
。如果我尝试下面的代码
DT[, ab := rowSums(.SD[, ..sl])]
我仍然能够获得所需的输出,但给出了一条警告消息
DT[, ab := rowSums(.SD[, ..sl])] 警告消息:在
[.data.table
(.SD, , ..sl) 中:“sl”和“..sl”都存在于调用范围内。为清楚起见,请删除调用范围中的“..sl”变量。
但是,运行时不会出现警告
DT[, ab := rowSums(.SD[, sl, with = FALSE])]
我想知道如何解决使用时的警告问题.SD[, ..sl]
。提前致谢!
解决方案
可能要使用的语法是指定.SDcols
并调用 the.SD
或直接..cols
从原始对象调用。根据?data.table
x[, cols] 等价于 x[, ..cols] 和 x[, cols, with=FALSE] 和 x[, .SD, .SDcols=cols]
如果我们检查 的源代码data.table
,第 248 行似乎是触发warning
作为
DT[, exists(..sl, where = DT)]
#[1] TRUE
和
DT[, .SD[, exists(..sl)]]
#[1] TRUE
DT[, .SD[, exists(..sl, where = .SD)]]
#[1] TRUE
推荐阅读
- android - Android从图库中选择图像不起作用
- r - Cumulative sum with restart, optimization in R
- postgresql - PostgreSQL COPY 无法从 CSV 文件中读取 JSON
- html - intersectionObeserver API 中的 isVisible 属性是什么意思?
- powershell - How to Combine and split values by delimiter?
- javascript - addEventListener 在 useEffect 挂钩中不起作用
- java - 如何使用 apache poi 在 docx 中计算 =SUM(Above) 函数
- javascript - 从 Nativescript 的 WebView 访问 headers/queryparams
- php - 相同的 url 重写起始 url 但目标不同的问题
- spring-kafka - 使用 SeekToCurrentErrorHandler 和 DeadLetterPublishingRecoverer 进行反序列化失败时未创建 DLT