有人可以向我解释为什么会这样:
a <- data.table(t(c(1, 2, 3, 4, 5)))
b <- matrix(data=1, nrow=10, ncol=5)
a[,lapply(.SD,function(x)(x*b[,x]))]
但这不是:
a <- data.table(t(c(0.1, 0.2, 0.3, 0.4, 0.5)))
b <- matrix(data=1, nrow=10, ncol=5)
a[,lapply(.SD,function(x)(x*b[,x]))]
答案 0 :(得分:2)
在第一种情况下,'a'的列值作为列索引用于子集'b',而在第二种情况下,它不会因为值为0.1到0.5而作为列索引。因此,不是循环遍历列,而是循环遍历列的序列,然后对'b'和列值进行子集化,这在两种情况下都有效
a[, lapply(seq_along(.SD),function(x)(.SD[[x]]*b[,x]))]
或者只是复制'a'的行,然后乘以'b'
a[rep(seq_len(.N), nrow(b))] * b