Как я могу преобразовать список в нескольких фреймах данных в R? - PullRequest
0 голосов
/ 06 марта 2020

У меня есть список из нескольких матриц. Я могу преобразовать элемент этого списка в фрейм данных, используя этот код:

as.data.frame(list_of_matrices[i])

Но как я могу сделать то же самое автоматически c для всех индексов (i)?

Я пытался:

a <- data.frame()
for(i in 1:length(list_of_matrices)){
  dataframes[i] <- as.data.frame(list_of_matrices[i])
}

, но это не сработало:

Error in `[[<-.data.frame`(`*tmp*`, i, value = list(X1 = 1:102, X2 = c(2L,  : 
  replacement has 102 rows, data has 0

Ответы [ 2 ]

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

В коде ОП нам нужно [[ вместо [, поскольку при выполнении [ все равно будет list длины 1

for(i in seq_along(list_of_matrices)){
    list_of_matrices[[i]] <- as.data.frame(list_of_matrices[[i]])
  }

Если нам нужно несколько объектов в глобальной среде (не рекомендуется), assign или list2env должны работать. После присвоения имени list пользовательским именам или letters (a, b, c,, ..), используйте list2env

names(list_of_matrices) <- letters[seq_along(list_of_matrices)]
list2env(list_of_matrices, .GlobalEnv)

Теперь мы проверяем на

head(a)
head(b)

Другая опция - это `assign with в самом l oop *

for(i in seq_along(list_of_matrices)) {
    assign(letters[i], as.data.frame(list_of_matrices[[i]])
 }

head(a)
head(b)

ПРИМЕЧАНИЕ: Мы предполагаем, что длина list_of_matrices меньше 26, иначе придется изменить имена из встроенного letters во что-то другое ..

0 голосов
/ 06 марта 2020

Попробуйте это:

# Example list of matrices
mat_list <- list(
  matrix(runif(20), 4, 5),
  matrix(runif(20), 4, 5)
)
# Convert to list of df
df_list <- lapply(mat_list, as.data.frame)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...