通过向量乘以data.table的列

ben*_*eni 0 r data.table

我有一个data.table,我希望将第1列中的所有值乘以向量的第一个元素,然后将第2列中的所有值乘以向量的第2个元素,等等......

dt <- data.table(col1=c(1,1,1,1), col2=c(2,2,2,2), col3=c(3,3,3,3))
v <- c(1,2,3)
Run Code Online (Sandbox Code Playgroud)

对于data.frame,我会这样做

dt.new <- sapply(1:ncol(dt), function(i) dt[, i] * vec[i])
Run Code Online (Sandbox Code Playgroud)

但它对data.table不起作用.我试过了

cols <- c("col1", "col2", "col3")
dt.new <- dt[, (cols):= lapply(.SD, function(i) dt[[i]]*v[i]), .SDcols = cols]
Run Code Online (Sandbox Code Playgroud)

它也不起作用.我怎样才能做到这一点?

Rol*_*and 5

Map 是为此而设计的:

dt[, Map("*", .SD, v)]
#   col1 col2 col3
#1:    1    4    9
#2:    1    4    9
#3:    1    4    9
#4:    1    4    9
Run Code Online (Sandbox Code Playgroud)

也适用于data.frame:

DF <- as.data.frame(dt)
as.data.frame(Map("*", DF, v))
#  col1 col2 col3
#1    1    4    9
#2    1    4    9
#3    1    4    9
#4    1    4    9
Run Code Online (Sandbox Code Playgroud)