在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个值,我需要对矩阵中的每个值进行进一步分析。我希望找到一种加速分析的方法。
答案 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