2014-10-01 67 views
0

我希望將來自合理長列表的所有元素的等效深層嵌套列組合在一起。我想這樣做,雖然R中是不可能的,是這樣的:將多個列表中的深嵌套向量結合起來

combined.columns <- my.list[[1:length(my.list)]]$my.matrix[,"my.column"] 

我能想到的是唯一需要手動輸入出cbind()所有元素是這樣的:

combined.columns <- cbind(my.list[[1]]$my.matrix[,"my.column"], my.list[[2]]$my.matrix[,"my.column"], . . .) 

This answer非常接近我所需要的,但我無法弄清楚如何使它適用於額外的嵌套層次。

儘管如此,必須有一個更優雅的方式來做到這一點。有任何想法嗎?

+1

在那個鏈接的問題中,我會做'sapply(test,c,recursive = TRUE)'以進入矩陣。你能提供一些你的數據嗎? – 2014-10-01 13:01:12

+0

[這裏](https://www.dropbox.com/s/l7c13g36e89vlnb/sample.data.RData?dl=0)是我的一些數據。實際上,我想要在列表的所有元素上合併矢量'X.mbl.vartime1 [[i]] $ per.bin.rates [,「in.rate」](儘管它也可以是任何列中之矩陣中之列表)。 – Roger 2014-10-01 13:19:03

回答

2

假設所有的矩陣具有要提取相同的列名,你可以使用sapply

set.seed(123) 
my.list <- vector("list") 
my.list[[1]] <- list(my.matrix = data.frame(A=rnorm(10,sd=0.3), B=rnorm(10,sd=0.3))) 
my.list[[2]] <- list(my.matrix = data.frame(C=rnorm(10,sd=0.3), B=rnorm(10,sd=0.3))) 
my.list[[3]] <- list(my.matrix = data.frame(D=rnorm(10,sd=0.3), B=rnorm(10,sd=0.3))) 

sapply(my.list, FUN = function(x) x$my.matrix[,"B"]) 
+0

正是我想要的,非常有效;謝謝! – Roger 2014-10-01 13:23:04

1

免費的數據:

myList <- list(list(myMat = matrix(1:10, 2, dimnames=list(NULL, letters[1:5])), 
        myVec = 1:10), 
       list(myMat = matrix(10:1, 2, dimnames=list(NULL, letters[1:5])), 
        myVec = 10:1)) 

我們可以得到柱myMata幾個不同的方法。這是一個使用with

sapply(myList, with, myMat[,"a"]) 
#  [,1] [,2] 
# [1,] 1 10 
# [2,] 2 9 

This mapply對於更多的遞歸類型問題,可能會更好。它的工作原理也可能比sapply更快。

mapply(function(x, y, z) x[[y]][,z] , myList, "myMat", "a") 
#  [,1] [,2] 
# [1,] 1 10 
# [2,] 2 9 
相關問題