Преобразовать список с несколькими элементами в матрицу - PullRequest
0 голосов
/ 05 июля 2018

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

    CURRENT  30DPD   60DPD  90DPD
1   0.56     56.67    67.6  57.67
2   0.24     56.78    7.6   24.67
3   0.32     56.11    66    34.67
4..........

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

for ( i in 1:3542) {  
   vec1 <- One[i,]
   vec2 <- two[i,]
   vec3 <- Three[i,]
   vec4 <- Four[i,]
   tab[[i]] <- c(vec1,vec2,vec3,vec4)
   final[[i]] <-matrix(unlist(tab[[i]]),nr=4,nc=4)
}

В списке у меня 3542 элемента, и я получаю сообщение об ошибке при использовании этого кода.

Ошибка в окончательной [[i]] <- матрице (unlist (tab [[i]])), nr = 4, nc = 4): <br> больше элементов, чем предусмотрено для замены

Но если я не использую индекс, он работает нормально, но для 3000 элементов это будет очень много времени. Любая идея, как я могу создать 3542 отдельных матриц, используя список?

Спасибо

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Вы можете сделать:

s = list(dat1,dat2,dat3,dat4) 
  do.call(Map,c(rbind,lapply(s,function(x)data.frame(t(x)))))
0 голосов
/ 05 июля 2018

Сначала убедитесь, что в вашем списке одинаковое количество элементов:

length(unique(lengths(your_list)) # should be one

Затем взгляните на классы, которые у вас там, чтобы увидеть, действительно ли вы можете / хотите привести их в матрицу:

unique(sapply(your_list, function(x) paste(class(x),collapse= " ")))

Тогда я считаю, что проще всего было бы сначала конвертировать в data.frame, затем в matrix:

mat <- as.matrix(as.data.frame(your_list))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...