我在R中有2个列表( my.listA 和 my.listB ),每个列表包含3个数据框:
da1 <- data.frame(x=c(1,2,3),y=c(4,5,6))
da2 <- data.frame(x=c(3,2,1),y=c(6,5,4))
da3 <- data.frame(x=c(5,4,1),y=c(8,5,7))
my.listA <- list(da1, da2, da3)
db1 <- data.frame(z=c(2))
db2 <- data.frame(z=c(3))
db3 <- data.frame(z=c(4))
my.listB <- list(db1, db2, db3)
我正在尝试获取一个新列表( my.listAB ),以便它包含3个数据框,显示 my.listA 和 my.listB 根据数据框末尾的数字配对&#39;名称,即 da1 中元素的乘积 db1 中的元素, da2 的乘积 db2 以及 da3 的产品 db3 。
这将是我想要的结果:
dab1 <- data.frame(x=c(2,4,6),y=c(8,10,12))
dab2 <- data.frame(x=c(9,6,3),y=c(18,15,12))
dab3 <- data.frame(x=c(20,16,4),y=c(32,20,28))
my.listAB <- list(dab1 , dab2 , dab3)
我尝试了以下操作,但它不起作用:
for (i in 1:3) {
my.listAB <- my.listA[[i]]*my.listB[[i]]
};
理想情况下,有人可以使用lapply函数指导我找到解决方案吗?
非常感谢!
答案 0 :(得分:0)
除了评论中@lukeA建议的lapply
和for
循环选项外,您还可以尝试Map
r1 <- Map(`*`, my.listA,unlist(my.listB))
identical(r1, my.listAB)
#[1] TRUE
答案 1 :(得分:0)
您可以使用
l <- lapply(1:3, function(x) my.listA[[x]] * my.listB[[x]]$z)
或
l <- list()
for (x in 1:3)
l[[x]] <- my.listA[[x]] * my.listB[[x]]$z