关于r:将向量保存到矩阵/数据帧值中

 2021-04-26 

save vector into matrix/data frame value

在R中是否有一种方法可以将整个矢量保存为矩阵或数据帧的一个值,而不必先将其组合为单个值?

例如,如果我有矢量。.

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

和一个矩阵..

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

不管怎么说,例如

1
tst[1,1]<-pk

我知道我可以将向量粘贴在一起,但是我想知道是否有避免这种情况的方法?这是效率问题,因为实际矩阵为33427 x 33427,每个向量的长度约为300个值,我需要对矩阵中的每个值进行进一步的分析。我希望找到一种加快分析速度的方法。


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

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

它不会打印"很好"

1
2
3
4
5
6
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

但是可以通过显而易见的方式提取元素

1
2
3
4
5
6
7
8
> 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的列表,并生成映射以将一维列表索引及其将对应的2D矩阵元素转换为映射。

其中哪些是最佳选择,将取决于您希望进行的下游分析。如果存在"内部-pk"通信(例如,使用[1,1]处pk的元素1和[1,2],[2,1] ...处pk的元素1),则数组解可能是更好的。但是,如果所有计算都在单个向量内,则列表可能是更好的选择


您还可以使用"原样" I函数,并使pk成为1个元素列表(包含矢量):

1
2
3
4
5
6
7
8
9
10
11
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