有没有办法将两个嵌套列表与不同长度的元素相乘,然后得到它们的总和?

问题描述 投票:0回答:1

我有这 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

非常感谢您的帮助!

r list arraylist functional-programming
1个回答
0
投票

是的,您可以先计算产品并创建一个列表:

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
© www.soinside.com 2019 - 2024. All rights reserved.