在数据帧列表之间应用函数

时间:2015-03-09 01:09:01

标签: r list function loops

我在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函数指导我找到解决方案吗?

非常感谢!

2 个答案:

答案 0 :(得分:0)

除了评论中@lukeA建议的lapplyfor循环选项外,您还可以尝试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