r - R data.table:.SD 的名称不可分配
问题描述
通常,我想在 DT 中操作多个变量,并且需要根据它们的名称或类来选择列名。
d <- data.table(x = 1:10, y= letters[1:10])
# My usual approach
col <- str_subset(names(d), '^x')
d[, (col) := 2:11]
但是,这样做会非常有用且不那么冗长:
d[, (names(.SD)) := 2:11, .SDcols = patterns('^x')]
但这会引发错误:
Error in `[.data.table`(d, , `:=`((names(.SD)), 2:11), .SDcols = patterns("^x")) :
LHS of := isn't column names ('character') or positions ('integer' or 'numeric')
>
.SD 的列名是可用的,但是:
> d[, names(.SD), .SDcols = patterns('^x')]
[1] "x"
为什么 .SD 的名称不能在 := 的 LHS 上分配?
解决方案
如前所述,这还不可能。解决方法只添加一行代码:
cols = grep('^x', names(d))
d[ , (cols) := 2:11, .SDcols = cols]
推荐阅读
- android - Android 双向数据绑定使用 MutableStateFlow 并观察 ViewModel 的变化
- docker - Elasticsearch 错误:“master not found yet” - 节点之间没有路由
- c# - 如何抑制 NLOG 结构化日志记录中的某些字段?
- java - IntelliJ Idea 如何在我的 maven 项目中自动检测 testng 监听器?
- asp.net - IdentityServer4 混合流令牌刷新与 SignalR
- angular - 如何在 IONIC 5 中使用 Globalization(用于翻译)插件
- mysql - MySQL 列到键值对行
- java - 错误:找不到适合 add(double) arr.add(root1) 的方法;
- google-cloud-platform - 找不到类型为“w2_”的文档,找到了 1 个其他文档类型 - Google Document AI
- c# - 如何在层和层之间划分绑定到 DI 容器的依赖项?