R 使用点时为data.table赋值

R 使用点时为data.table赋值,r,data.table,R,Data.table,我想按名称从data.table的多个列中减去向量。我使用了一种点-点的方法,我似乎无法理解为什么上一个赋值不起作用,因为两个表达式单独计算时效果都很好。我附上了一个可复制的例子,应该可以清楚地说明这个问题 dt <- data.table("a_x" = rnorm(10), "b_x" = rnorm(10), "a_y" = rnorm(10), "b_y" = rnorm(10), "d" =

我想按名称从data.table的多个列中减去向量。我使用了一种点-点的方法,我似乎无法理解为什么上一个赋值不起作用,因为两个表达式单独计算时效果都很好。我附上了一个可复制的例子,应该可以清楚地说明这个问题

dt <- data.table("a_x" = rnorm(10),
           "b_x" = rnorm(10),
           "a_y" = rnorm(10),
           "b_y" = rnorm(10),
           "d" = rnorm(10)
           )

XIND <- names(dt) %like% "_x"

MAT <- matrix(dt[,d], nrow = dim(dt[,..XIND])[1], ncol = dim(dt[,..XIND])[2])
dt[,..XIND] <- dt[,..XIND] - MAT

dt我使用了
stru子集
作为解决方法,但在我看来,这并不理想

dt[,(str_subset(names(dt),"_x"))] <- dt[,..XIND] - MAT

dt[,(str_子集(名称(dt),“_x”))]这里是另一个我觉得更习惯的选项:

dt <- data.table("a_x" = 1:10, "b_x" = 2:11, "d" = 1:10)
XIND <- grep("_x$", names(dt))
dt[, (XIND) := .SD - d, .SDcols=XIND]

dt您真的应该用GitHub上的
data.table
devs提出这个问题。