矩阵乘法与数据表中的整数或双精度

时间:2018-03-24 10:26:44

标签: r data.table

有人可以向我解释为什么会这样:

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]))]

1 个答案:

答案 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