Вложено для l oop итерирует только последние записи [r] - PullRequest
1 голос
/ 15 марта 2020

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

a <- list()


for (z in 1:200){
  for (i in 1:32){
    a[z] = ListOfDataFrames[[i]][["X"]][[z,1]]
  }
}

Это создает только список из 200 значений ListOfDataFrames [[32]] [["X"]], который является последним кадром данных в списке.

Вот (str (ListOfDataFrames))

List of 32
 $ :List of 2
  ..$ X           :'data.frame':    200 obs. of  3 variables:
  .. ..$ pressure   : num [1:200] 635 640 760 890 900 900 910 920 1000 1000 ...
  .. ..$ pressure1  : num [1:200] 735 740 820 840 890 900 910 920 1000 1000 ...
  .. ..$ pressure2  : num [1:200] 645 670 760 890 900 900 910 920 1000 1000 ...

1 Ответ

1 голос
/ 15 марта 2020

На основе показанной структуры параметр с tidyverse будет иметь значение

library(dplyr)
library(purrr)
out <-  map(ListOfDataFrames, ~ pluck(.x, "X") %>%
              group_split(grp = row_number(), keep = FALSE)) %>% 
          transpose %>% 
          map(bind_rows)

. При for l oop лучше инициализировать предопределенный элемент list длина

l1 <- nrow(ListOfDataFrames[[1]]$X)
a <- vector('list', l1)
for (z in seq_len(l1)){
  for (i in seq_along(ListOfDataFrames)){
    a[[z]] = rbind(a[[z]], ListOfDataFrames[[i]][["X"]][z,])
  }
}

- проверка

all.equal(out, a, check.attributes = FALSE)
#[1] TRUE

данные

ListOfDataFrames <- list(list(X = structure(list(col1 = 1:6, col2 = 7:12), class = "data.frame", row.names = c(NA, 
-6L)), Y = 1:7), list(X = structure(list(col1 = 1:6, col2 = 7:12), class = "data.frame", row.names = c(NA, 
-6L)), Y = 1:7), list(X = structure(list(col1 = 1:6, col2 = 7:12), class = "data.frame", row.names = c(NA, 
-6L)), Y = 1:7), list(X = structure(list(col1 = 1:6, col2 = 7:12), class = "data.frame", row.names = c(NA, 
-6L)), Y = 1:7), list(X = structure(list(col1 = 1:6, col2 = 7:12), class = "data.frame", row.names = c(NA, 
-6L)), Y = 1:7))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...