Действительно @MartinMorgan, хороший момент! Я попал в сорняки и не мог этого увидеть.

я естьсписок списков, содержащий data.frames, из которого я хочувыберите только несколько строк, Я могу добиться этого в цикле for, где я создаю последовательность на основе количества строк и выбираю только индексы строк в соответствии с этой последовательностью.

Но если у меня есть более глубокие вложенные списки, это больше не работает. Я также уверен, что есть лучший способ сделать это без цикла.

Каков будет эффективный и общий подход к выборке из вложенных списков, которые различаются по своим размерам и содержат data.frames или матрицы?

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

Код выше работает также, если список содержит несколько data.frames(данные ниже).

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

Но если список содержит несколько списков, он выдает ошибку, пытаясь связать результат (FiltRef) все вместе.

Результатом может быть data.frame с двумя столбцами (x, y) - какcrdResult или одномерный список, какFiltRef (из первого примера)

## 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 и спасибо все за ваши блестящие ответы! Все они работают, и у каждого из них есть чему поучиться. Я передам это @ Gwang-Jin Kim, поскольку его решение является наиболее гибким и обширным, хотя все они заслуживают проверки!

Ответы на вопрос(3)

Ваш ответ на вопрос