2014-04-30 30 views
3

在R中,有沒有辦法將整個向量保存爲矩陣或數據幀的一個值,而不必先將它合併爲一個單值?將向量保存爲矩陣/數據幀值

例如,如果我有一個矢量..

pk<-c(0.021477,0.021114,0.022794,0.014858,0.009690,0.003255,0.002715) 

和基質..

tst<-matrix(data=NA,nrow=4,ncol=4) 

是說,例如有反正..

tst[1,1]<-pk 

我知道我可以將矢量粘貼在一起,但我想知道是否有避免這種方法?這是一個效率問題,因爲實際矩陣是33427 x 33427,每個向量的值大約爲300,我需要對矩陣中的每個值進行進一步的分析。我希望找到加快分析的方法。

回答

3

你當然可以在矩陣的每個元素中放入一個向量。嘗試類似

tst<-matrix(data=list(),nrow=4,ncol=4) 
tst[[1,1]] <- pk #note double square brackets needed for assignment 

它不打印「很好」

tst 
    [,1]  [,2] [,3] [,4] 
[1,] Integer,5 NULL NULL NULL 
[2,] NULL  NULL NULL NULL 
[3,] NULL  NULL NULL NULL 
[4,] NULL  NULL NULL NULL 

但元素可以在明顯的方式來提取

> tst[1,1] 
[[1]] 
[1] 0.021477 0.021114 0.022794 0.014858 0.009690 0.003255 0.002715 
#note list 

> tst[[1,1]] 
[1] 0.021477 0.021114 0.022794 0.014858 0.009690 0.003255 0.002715 
#original vector 
+0

這很完美,謝謝! – user3589420

2

如果向量是不同長度的,我可以看到處理它的兩種方式。無論是圓了長度到最大,並把東西放在一個陣列

tst<- array(data=NA, dim=c(4,4,maxLen)) 
tst[1,1,1:length(pk)] <- pk 

或者你可以創建pk s的名單,並生成地圖,以翻譯與二維矩陣元素的一個維列表索引他們會對應。

哪些是最佳的取決於您希望執行的下游分析。如果存在'pk間'通信(例如,您使用[1,1]處的pk的元素1和[1,2],[2,1] ...處的pk的元素1),則陣列解決方案可能是更好。但是,如果所有的計算都是一個單獨的載體中,列表可能是一個更好的方式去

0

您還可以使用「保持原樣」 I功能,使pk 1名元素的列表(即持有向量):

pk <- c(0.021477,0.021114,0.022794,0.014858,0.009690,0.003255,0.002715) 
dat <- data.frame(a <- I(list(pk))) 
str(dat) 
## 'data.frame': 1 obs. of 1 variable: 
## $ a....I.list.pk..:List of 1 
## ..$ : num 0.02148 0.02111 0.02279 0.01486 0.00969 ... 
## ..- attr(*, "class")= chr "AsIs" 

dat[1,1] 
## [[1]] 
## [1] 0.021477 0.021114 0.022794 0.014858 0.009690 0.003255 0.002715