我有这 2 个嵌套列表,其中每个子列表中,其元素的长度具有不同的大小。
list1<-list(
list(c(1,2,3), c(4,5,6),c(7,8,9)),
list(c(2,4,6), c(8,10,12),c(14,16,18))
)
list2 <- list(
list(c(1,0), c(1,2,0),c(1,2,3,0)),
list(c(1,0), c(1,2,0),c(1,2,3,0))
)
我想得到这两个列表的乘积,其中每个子列表的元素长度遵循列表2的子列表的长度。就像这样:
output<-list(
list(c(1,0), c(4,10,0),c(7,16,27,0)),
list(c(2,0), c(8,20,0),c(14,32,54,0))
)
然后,我想找到每个子列表的总和作为最终输出:
finaloutput<- list(
list(c(1), c(14),c(50)),
list(c(2), c(28),c(100))
)
我尝试将两个列表相乘,但它给了我这个错误
Error in list1 * list2 : non-numeric argument to binary operator
非常感谢您的帮助!
是的,您可以先计算产品并创建一个列表:
list1 <- list(
list(c(1,2,3), c(4,5,6),c(7,8,9)),
list(c(2,4,6), c(8,10,12),c(14,16,18))
)
list2 <- list(
list(c(1,0), c(1,2,0),c(1,2,3,0)),
list(c(1,0), c(1,2,0),c(1,2,3,0))
)
product_list <- list()
for (i in seq_along(list1)) {
sublist1 <- list1[[i]]
sublist2 <- list2[[i]]
product_sublist <- list()
for (j in seq_along(sublist1)) {
vec1 <- sublist1[[j]]
vec2 <- sublist2[[j]]
length_vec2 <- length(vec2)
if (length(vec1) > length_vec2) {
vec1 <- vec1[1:length_vec2]
} else if (length(vec1) < length_vec2) {
vec2 <- vec2[1:length(vec1)]
}
product_vec <- vec1 * vec2
product_sublist[[j]] <- product_vec
}
product_list[[i]] <- product_sublist
}
final_output <- list()
for (i in seq_along(product_list)) {
sublist <- product_list[[i]]
sum_sublist <- lapply(sublist, function(x) sum(x))
final_output[[i]] <- sum_sublist
}
print(final_output)
这给了你
[[1]]
[[1]][[1]]
[1] 1
[[1]][[2]]
[1] 14
[[1]][[3]]
[1] 50
[[2]]
[[2]][[1]]
[1] 2
[[2]][[2]]
[1] 28
[[2]][[3]]
[1] 100