Amostragem eficiente de listas aninhadas

eu tenho umlista de listas, contendo data.frames, dos quais desejoselecione apenas algumas linhas. Consigo em um loop for, onde crio uma sequência com base na quantidade de linhas e seleciono apenas índices de linha de acordo com essa sequência.

Mas se eu tiver listas aninhadas mais profundas, não funcionará mais. Também tenho certeza de que existe uma maneira melhor de fazer isso sem um loop.

Qual seria uma abordagem eficiente e genérica para amostrar de listas aninhadas, que variam em suas dimensões e contêm data.frames ou matrizes?

## Dummy Data
n1=100;n2=300;n3=100
crdOrig <- list(
  list(data.frame(x = runif(n1,10,20), y = runif(n1,40,60))),
  list(data.frame(x = runif(n2,10,20), y = runif(n2,40,60))),
  list(data.frame(x = runif(n3,10,20), y = runif(n3,40,60)))
)

## Code to opimize
FiltRef <- list()
filterBy = 10
for (r in 1:length(crdOrig)) { 
  tmp <- do.call(rbind, crdOrig[[r]])
  filterInd <- seq(1,nrow(tmp), by = filterBy)
  FiltRef[[r]] <- tmp[filterInd,]
}
crdResult <- do.call(rbind, FiltRef)

# Plotting
crdOrigPl <- do.call(rbind, unlist(crdOrig, recursive = F))
plot(crdOrigPl[,1], crdOrigPl[,2], col="red", pch=20)
points(crdResult[,1], crdResult[,2], col="green", pch=20)

O código acima também funciona se uma lista contiver vários data.frames(dados abaixo).

## Dummy Data (Multiple DF)
crdOrig <- list(
  list(data.frame(x = runif(n1,10,20), y = runif(n1,40,60)),
       data.frame(x = runif(n1,10,20), y = runif(n1,40,60))),
  list(data.frame(x = runif(n2,10,20), y = runif(n2,40,60))),
  list(data.frame(x = runif(n3,10,20), y = runif(n3,40,60)))
)

Mas se uma lista contém várias listas, gera um erro ao tentar vincular o resultado (FiltRef) juntos.

O resultado pode ser um data.frame com 2 colunas (x, y) - comocrdResult ou uma lista unidimensional comoFiltRef (do primeiro exemplo)

## Dummy Data (Multiple Lists)
crdOrig <- list(
  list(list(data.frame(x = runif(n1,10,20), y = runif(n1,40,60))),
       list(data.frame(x = runif(n1,10,20), y = runif(n1,40,60)))),
  list(data.frame(x = runif(n2,10,20), y = runif(n2,40,60))),
  list(data.frame(x = runif(n3,10,20), y = runif(n3,40,60)))
)

+1 e obrigado tudo por suas respostas brilhantes! Todos eles trabalham e há muito a aprender com cada um deles. Eu darei este para @ Gwang-Jin Kim, já que sua solução é a mais flexível e abrangente, embora todos eles mereçam ser verificados!

questionAnswers(5)

yourAnswerToTheQuestion