R: ошибка рекурсивной индексации на уровне 2

#rstudio

#rstudio

Вопрос:

Я создал список матриц, я хочу иметь возможность применять операции с ними, единственное, что я хочу сделать, это объединить их с помощью операторов, таких как cbin и rbind, среди прочих, один из способов сделать это — следующий, но я просто хочу сохранить матрицы в списке и применить операциибез записи всех.

 'Combinedmatrix<-cbind(elementlist[[1]],...,elementlist[[n]])'
  

Есть ли способ сделать то же самое вместо записи каждого элемента списка?
Я попробовал следующий

 '(i in 1:length(list)){combinedmatrix<-cbind(list[[i]])}'
  

в этом случае он принимает только последний элемент и больше ничего не делает,
другой способ, который я пробовал, был:

 'i<-1:length(list)'
'combinedmatrix<-cbind(list[[i]])}'
  

в этом случае появляется

 'Error in list[[i]] : recursive indexing failed at level 2'
  

Ответ №1:

Вы можете использовать reduce() из purrr пакета. Предполагается mlist , что ваш список матриц:

 library(purrr)
reduce(mlist,rbind)
  

С примерами данных:

 > mlist <- list(matrix(1:9,nrow=3),matrix(1:9,nrow=3),matrix(1:9,nrow=3))
> mlist
[[1]]
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

[[2]]
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

[[3]]
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9


> reduce(mlist,rbind)

      [,1] [,2] [,3]
 [1,]    1    4    7
 [2,]    2    5    8
 [3,]    3    6    9
 [4,]    1    4    7
 [5,]    2    5    8
 [6,]    3    6    9
 [7,]    1    4    7
 [8,]    2    5    8
 [9,]    3    6    9