代码之家  ›  专栏  ›  技术社区  ›  Z117

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

  •  1
  • Z117  · 技术社区  · 7 年前

    有人能给我解释一下为什么会这样:

    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 回复  |  直到 7 年前
        1
  •  2
  •   akrun    7 年前

    在第一种情况下,“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