2017-06-24 5 views
0

J'essaie de vectoriser une boucle désordonnée dans un ancien code.Affecter des colonnes matricielles en tant qu'éléments d'une liste

Disons que j'ai une liste list1, une matrice mat1, et un vecteur d'indices ind1, quelque chose comme:

list1 <- list(2:4, 1:3, 11:19, 36:42) 
list1 
## [[1]] 
## [1] 2 3 4 
## 
## [[2]] 
## [1] 1 2 3 
## 
## [[3]] 
## [1] 11 12 13 14 15 16 17 18 19 
## 
## [[4]] 
## [1] 36 37 38 39 40 41 42 

matrix1 <- matrix(1:16, nrow=4, ncol=4) 
matrix1 
##  [,1] [,2] [,3] [,4] 
## [1,] 1 5 9 13 
## [2,] 2 6 10 14 
## [3,] 3 7 11 15 
## [4,] 4 8 12 16 

indices1 <- 1:2 

est-il un moyen propre d'extraire des colonnes de matrix1 des indices indices1, qui est, matrix1[,indices1] et attribuant à chaque vecteur de colonneà un élément de liste correspondant àlist1, soit list1[indices1]

... tous avec la sortie désirée

list1 
## [[1]] 
## [1] 1 2 3 4 
## 
## [[2]] 
## [1] 5 6 7 8 
## 
## [[3]] 
## [1] 11 12 13 14 15 16 17 18 19 
## 
## [[4]] 
## [1] 36 37 38 39 40 41 42 

Ce serait certainement possible avec une boucle ou une fonction de type appliquer, mais mon espoir est quelque chose de plus efficace. Merci pour vos suggestions!

Répondre

1
list1[indices1] <- data.frame(matrix1[,indices1]) 

Je ne sais pas si c'est assez efficace. Il semble réaliser ce que vous voulez faire.

+0

Merci! Je suis loin de ma machine en ce moment, mais cela semble simple et prometteur. –

+0

J'ai essayé cette solution dans mon code et cela a bien fonctionné - cependant, il n'a pas fini d'ajouter quoi que ce soit dans la performance en contexte (bouclait seulement 3-4 itérations à la fois). Leçon apprise: répéter un processus simple à plusieurs reprises peut être plus efficace qu'un processus complexe une fois. Mais merci encore! –