访问列表R中矩阵的相同元素

访问列表R中矩阵的相同元素,r,list,matrix,R,List,Matrix,我在R中有一个相同维度的矩阵列表。我想一次访问每个矩阵的相同元素 例如: a <- matrix(c(1,2,3,4,5,6,7,8,9), byrow=T, ncol=3) b <- matrix(c(9,8,7,6,5,4,3,2,1), byrow=T, ncol=3) c <- matrix(c(2,3,4,5,6,7,2,8,5), byrow=T, ncol=3) d <- list(a, b, c) 我想依次访问a[1,1]、b[1,1]、c[1,1],然

我在R中有一个相同维度的矩阵列表。我想一次访问每个矩阵的相同元素

例如:

a <- matrix(c(1,2,3,4,5,6,7,8,9), byrow=T, ncol=3)
b <- matrix(c(9,8,7,6,5,4,3,2,1), byrow=T, ncol=3)
c <- matrix(c(2,3,4,5,6,7,2,8,5), byrow=T, ncol=3)
d <- list(a, b, c)

我想依次访问a[1,1]、b[1,1]、c[1,1],然后访问a[1,2]、b[1,2]、c[1,2]…

最简单、最清晰的方法是创建两个嵌套循环:

for(i in 1:3) {
    for(j in 1:3) {
        print(a[i, j] == b[i, j])
    }
 }
但考虑到你的问题,你可以简单地将矩阵与此进行比较。这验证了两个矩阵是否相同:

all(a == b)
Same <- NULL
for(i in 1:3)
  for(j in 1:3) {
    s <- length(unique(sapply(d, `[`, i, j))) == 1
    print( length(unique(sapply(d, `[`, i, j))) == 1 )
    Same <- c(Same, s)
  }
 print(Same)
现在还可以循环浏览矩阵列表。你称之为d名单:

但是,如果坚持按指定的顺序检查值,则可以使用sapply访问它们

现在,让我们最后检查所有元素是否相同:

all(a == b)
Same <- NULL
for(i in 1:3)
  for(j in 1:3) {
    s <- length(unique(sapply(d, `[`, i, j))) == 1
    print( length(unique(sapply(d, `[`, i, j))) == 1 )
    Same <- c(Same, s)
  }
 print(Same)

你是说a==b的结果吗?@Waldi对于列表中的n个矩阵,我需要检查不同矩阵的对应元素是否相同。你能给出你的例子来显示预期的输出吗?@markus我不知道是否能显示预期的输出,但是。。在一行中,如果每个矩阵的相同列号中的元素相同,例如,如果a[1,3]、b[1,3]和c[1,3]相同,我将在新矩阵中找到这些矩阵中每个矩阵的第1行。这将使我能够仅检查单个矩阵的元素。我的问题不同。我需要一起检查所有矩阵的对应元素。对应元素不是指整个矩阵,而是指给定索引处的对应元素,如每个矩阵的[2,5]。这是第三种方法给出的。它循环遍历行和列索引,并比较位置[i,j]处的值。最后一个对于我来说效果很好,只是我不需要打印输出。相反,我想把它们放在一个变量中。你能帮忙吗?