combinação de expand.grid e mapply?
Estou tentando criar uma variante demapply
(chame-oxapply
por enquanto) que combina a funcionalidade (mais ou menos) deexpand.grid
emapply
. Ou seja, para uma funçãoFUN
e uma lista de argumentosL1
, L2
, L3
, ... dounknown length, deve produzir uma lista de comprimenton1*n2*n3
(Ondeni
é o comprimento da listai
), resultado da aplicação deFUN
para todas as combinações dos elementos da list
E seexpand.grid
trabalhou para gerar listas de listas em vez de quadros de dados, pode-se usá-lo, mas tenho em mente que as listas podem ser listas de coisas que não necessariamente se encaixam em um quadro de dado
Esta função funciona bem se houver exatamente três listas para expandir, mas estou curioso sobre uma solução mais genérica. FLATTEN
não é usado, mas posso imaginar queFLATTEN=FALSE
geraria listas aninhadas em vez de uma única lista ...)
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
}
editar esqueceu de retornar o resultado. Pode-se resolver isso fazendo uma lista dos índices comcombn
e indo de lá ...