【发布时间】:2021-05-06 01:06:24
【问题描述】:
我想在 R 中模仿 STATA 的本地宏。 基本上,假设我有一个 data.table 有许多变量,它们具有相同的起始字符串但不同的结束字符串;我想以编程方式更改它。我知道你可以用 eval(as.name(x)) 来做到这一点,但是在我的代码中有这么多次会很忙。 有没有人可以解决这个问题?
例如
library(data.table)
a <- data.table(bob_1 = c(1:3), bob_2 = c(1:3), bob_3 = c(1:3))
# this works
for (i in c(1:3)){
a[,(paste0("bob_",i)):=eval(as.name(paste0("bob_",i))) + 1]
}
a <- as.data.table(a)
print(a)
# this also works
a <- data.table(bob_1 = c(1:3), bob_2 = c(1:3), bob_3 = c(1:3))
for (i in c(1:3)){
a[,(paste0("bob_",i)):=.SD + 1, .SDcols = (paste0("bob_",i))]
}
a <- as.data.table(a)
print(a)
# but this doesn't
sa <- function(...) {eval(as.name(paste0(...)))}
a <- data.table(bob_1 = c(1:3), bob_2 = c(1:3), bob_3 = c(1:3))
for (i in c(1:3)){
a[,(paste0("bob_",i)):=sa("bob_",i) + 1]
}
# <<error message>>
a <- as.data.table(a)
print(a)
【问题讨论】:
-
就像一个注释,您可能想查看这个待定 PR,它将介绍一种更通用的 data.table 查询编程方式github.com/Rdatatable/data.table/pull/4304
-
所以这些新功能将在下一版 data.table 中发布?
-
顺便说一句,这会很棒。对你的工作感到惊讶..
-
让我们保守地说“即将出版的版本”????
标签: r function data.table eval