Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 对子元素具有相同名称的列表元素求和 列表以重现最小工作示例_R_Arrays_List - Fatal编程技术网

R 对子元素具有相同名称的列表元素求和 列表以重现最小工作示例

R 对子元素具有相同名称的列表元素求和 列表以重现最小工作示例,r,arrays,list,R,Arrays,List,假设我有一张这样的清单 a <- list( list( a=matrix(c(1, 2)), b=matrix(c(1,2,1,2), ncol=2)), list( a=matrix(c(3, 5)), b=matrix(c(5,2,7,1), ncol=2)) ) [[1]] [[1]]$a [,1] [1,] 1 [2,] 2 [[1]]$b [,1] [,2]

假设我有一张这样的清单

a <- list(
    list(
        a=matrix(c(1, 2)), 
        b=matrix(c(1,2,1,2), ncol=2)),
    list(
        a=matrix(c(3, 5)), 
        b=matrix(c(5,2,7,1), ncol=2))
)
[[1]]
[[1]]$a
     [,1]
[1,]    1
[2,]    2

[[1]]$b
     [,1] [,2]
[1,]    1    1
[2,]    2    2


[[2]]
[[2]]$a
     [,1]
[1,]    3
[2,]    5

[[2]]$b
     [,1] [,2]
[1,]    5    7
[2,]    2    1
期望输出 对于
a
的每个元素,我希望找到正确名称上的和。在这种情况下,我希望能够有一个类似的输出(虽然不需要是列表)


获得此输出的最快方法是什么?我可以用for循环来实现这一点,但我确信一定有更好的方法。

使用
转置
来交换内部和外部列表。然后使用
map
reduce
进行总结

library(purrr)

a %>%
  transpose %>%
  map(~ reduce(., `+`))

# $a
#      [,1]
# [1,]    4
# [2,]    7
# 
# $b
#      [,1] [,2]
# [1,]    6    8
# [2,]    4    3

在R垒你可以做到

Map(function(i) a[[1]][[i]] + a[[2]][[i]], el(Map(names, a)))
或者更一般地说

sapply(el(Map(names, a)), function(i) Reduce(`+`, mapply(`[`, a, i)))
# $a
#      [,1]
# [1,]    4
# [2,]    7
# 
# $b
#      [,1] [,2]
# [1,]    6    8
# [2,]    4    3

我想名单上可能有很多elements@Euler_Salter现在好多了?
sapply(el(Map(names, a)), function(i) Reduce(`+`, mapply(`[`, a, i)))
# $a
#      [,1]
# [1,]    4
# [2,]    7
# 
# $b
#      [,1] [,2]
# [1,]    6    8
# [2,]    4    3