如何在r中进行列表和矩阵之间的计算

如何在r中进行列表和矩阵之间的计算,r,R,我有一个列表和矩阵,如下所示: 清单Y: $`1` V1 V2 1 1 1 2 1 2 3 2 1 4 2 2 $`2` V1 V2 5 5 5 6 11 2 $`3` V1 V2 7 10 1 8 10 2 9 11 1 10 5 6 矩阵Z: [,1][,2][,3][,4][,5][,6] [1,] 2 1 5 5 10 1 我在矩阵Z

我有一个列表和矩阵,如下所示:

清单Y:

 $`1`
    V1 V2
 1  1  1
 2  1  2
 3  2  1
 4  2  2

 $`2`
     V1 V2
 5   5  5
 6   11 2

  $`3`
     V1  V2
  7  10   1
  8  10   2
  9  11   1
 10   5   6
矩阵Z:

     [,1][,2][,3][,4][,5][,6]
[1,]   2   1   5   5  10   1

我在矩阵Z中分别考虑了点1、点2和点3。 点1-(2,1)

点2-(5,5)

点3-(10,1)

我想计算列表Y[[1]]中的所有点与点S1、列表Y[[2]]中的所有点与点S2、列表Y[[3]]中的所有点与r中的点3之间的距离之和。我该怎么做

  rowsums(|y-z|^2)

尝试以下方法。它使用
Map
将函数应用于传递给
Map
的两个列表的每个向量。请注意,我们不能简单地这样做

Map('-', Y, Z2)
因为
R
将按列执行减法,而不是逐行执行

f <- function(x, y){
    for(i in seq_len(nrow(x)))
        x[i, ] <- x[i, ] - y
    x
}

Z2 <- split(Z, rep(1:3, each = 2))
Map(f, Y, Z2)

f根据描述

Map(function(y, z) rowSums(abs(y - z[col(y)])^2),
                 Y, split(Z, as.numeric(gl(ncol(Z), 2, ncol(Z)))))

此解决方案提供了正确的期望输出,非常感谢。在完成上述计算之后,我如何才能得到所有答案的总和[[1][[2][[3]]?@DataMiningStudent如果
lst
是输出对象,那么
sum(unlist(lst))
你好,我有一个问题。在我上面的问题中,列表Y被认为是一个列表,即列表Y[[1]],但是如果列表Y有10个列表-[[1]]到[[10]],矩阵Z有多行,该怎么做?@DataMiningStudent它像
列表的
列表
?你能发布一个新问题吗?嗨,我发布了一个新问题
Map('-', Y, Z2)
f <- function(x, y){
    for(i in seq_len(nrow(x)))
        x[i, ] <- x[i, ] - y
    x
}

Z2 <- split(Z, rep(1:3, each = 2))
Map(f, Y, Z2)
Map(function(y, z) rowSums(abs(y - z[col(y)])^2),
                 Y, split(Z, as.numeric(gl(ncol(Z), 2, ncol(Z)))))