Мы можем использовать Reduce
для суммирования соответствующих элементов i, j в list
и свернуть их в один набор данных
lapply(z, function(x) Reduce(`+`, x))
Если мы хотим удалить последний столбец, который не является числовым c
lapply(z, function(x) Reduce(`+`, lapply(x, function(y) y[-ncol(y)])))
Или это может быть зациклено по последовательности list
lapply(seq_along(z), function(i) Reduce(`+`, lapply(seq_along(z[[i]]),
function(j) z[[i]][[j]][-ncol(z[[i]][[j]])])))
Если мы хотим использовать sum
, data.frame
s внутри list
можно преобразовать в array
, l oop над array
с помощью apply
, указать MARGIN
и сделать sum
. В этом варианте также есть возможность позаботиться о NA
элементах с na.rm = TRUE
в sum
lapply(z, function(x) apply(array(unlist(x), c(10, 10, 10)),
1:2, sum, na.rm = TRUE))
или сделать его более эффективным, зацикливаясь только на одном измерении и используя colSums
lapply(z, function(x) apply(array(unlist(x), c(10, 10, 10)), 1, colSums, na.rm = TRUE))
Или используя for
l oop
z1 <- replicate(length(z), matrix(0, 10, 10), simplify = FALSE)
for(i in seq_along(z)) for(j in seq_along(z[[1]])) z1[[i]] <- z1[[i]] + z[[i]][[j]]