我想拿出一个变种mapply(称它为xapply现在),它结合了功能(在某种程度上)的expand.grid和mapply.也就是说,对于一个功能FUN和参数列表L1,L2,L3,...的长度未知,但应该产生长度的列表n1*n2*n3(其中,ni是列表的长度i),这是施加的结果FUN到的元素的所有组合名单.
如果expand.grid用于生成列表而不是数据框列表,则可以使用它,但我记得列表可能是不一定适合数据框的事物列表.
如果有三个要扩展的列表,这个功能可以正常工作,但我很好奇一个更通用的解决方案.(FLATTEN未使用,但我可以想象这FLATTEN=FALSE将生成嵌套列表而不是单个列表...)
xapply3 <- function(FUN,L1,L2,L3,FLATTEN=TRUE,MoreArgs=NULL) {
retlist <- list()
count <- 1
for (i in seq_along(L1)) {
for (j in seq_along(L2)) {
for (k in seq_along(L3)) {
retlist[[count]] <- do.call(FUN,c(list(L1[[i]],L2[[j]],L3[[k]]),MoreArgs))
count <- count+1
}
}
}
retlist
}
Run Code Online (Sandbox Code Playgroud)
编辑:忘了返回结果.有人可能通过combn在那里制作一份指数清单来解决这个问题......