Muestreo eficiente de listas anidadas

Tengo unlista de listas, que contiene data.frames, desde donde quieroseleccione solo unas pocas filas. Puedo lograrlo en un ciclo for, donde creo una secuencia basada en la cantidad de filas y selecciono solo índices de fila de acuerdo con esa secuencia.

Pero si tengo listas anidadas más profundas, ya no funciona. También estoy seguro de que hay una mejor manera de hacerlo sin un bucle.

Cuál sería un enfoque eficiente y genérico para tomar muestras de listas anidadas, que varían en sus dimensiones y contienen data.frames o matrices?

## 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)

El código anterior también funciona si una lista contiene varios data.frames (datos a continuación).

## 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)))
)

Pero si una lista contiene varias listas, arroja un error al intentar vincular el resultado FiltRef) juntos.

El resultado puede ser un marco de datos con 2 columnas (x, y), comocrdResult o una lista unidimensional comoFiltRef (desde el primer ejemplo)

## 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 y gracias todo por sus brillantes respuestas! Todos funcionan y hay mucho que aprender de cada uno de ellos. Le daré esta a @ Gwang-Jin Kim ya que su solución es la más flexible y extensa, ¡aunque todas merecen ser revisadas!

Respuestas a la pregunta(5)

Su respuesta a la pregunta