将矢量保存到矩阵/数据帧值

时间:2014-04-30 13:33:44

标签: r vector matrix

在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 个答案:

答案 0 :(得分:5)

你当然可以在矩阵的每个元素中放置一个向量。尝试像

这样的东西
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

答案 1 :(得分:2)

如果向量的长度不同,我可以看到两种方法来处理它。将长度向上舍入到最大值并将数据放入数组

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

或者,您可以创建pk的列表,并生成一个地图,将1维列表索引与他们将要对应的2D矩阵元素进行转换。

其中哪一项最佳将取决于您希望进行的下游分析。如果有'inter-pk'通信(例如你在[1,1]处使用pk的元素1和在[1,2],[2,1] ......处使用pk的元素1)那么阵列解决方案可能是更好。但是如果所有计算都在一个单独的向量中,那么列表可能是更好的方法

答案 2 :(得分:1)

您还可以使用“原样”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