将函数应用于列表的每个元素和两个数据帧的每一行

时间:2017-03-24 18:39:34

标签: r loops apply

是否有"申请"申请这个而不是在基础R中的两个数据帧的每一行上进行双循环(不使用包)?

listD <- matrix(1:6, ncol=2)
listD <- split(listD,seq(NROW(listD)))
df1 <- data.frame(x=c(1,2), y=c(3,4))
df2 <- data.frame(x=c(3,2), y=c(1,1))
testFunc <- function(a, b, c) a * (b + c)

for (j in 1:nrow(df1)) {
  for (s in 1:nrow(df2)) {
     print(lapply(listD, FUN= testFunc, b=df1[j,], c=df2[s,]))
  }
}

谢谢!

1 个答案:

答案 0 :(得分:1)

使用outer产生副作用:

invisible(outer(as.matrix(df1), as.matrix(df2), FUN = Vectorize(function (b, c) {
  print(lapply(listD, testFunc, b, c))
  NULL
})))

我不知道这是否对你的for循环有所改善。有一个神话围绕着R中的循环必须不惜一切代价避免(也许它们看起来太容易了?)

相关问题