用值序列填充矩阵

时间:2015-12-22 15:59:29

标签: r matrix fill

我有这个矩阵

all1 <- matrix(ncol=19,nrow=1356)) 

我想用这个数字的序列填充每一行

m <- c(4:22)

序列的长度恰好为19,与矩阵的列数一样,矩阵的每一行的长度。 我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

我认为你应该在矩阵的定义中插入值,使用 rep 函数,如下所示:

m <- matrix(rep(c(4:22), 1356), ncol=19, nrow=1356, byrow=T)

选项 byrow 告诉R按行而不是按列填充矩阵。

答案 1 :(得分:2)

matrix是执行此操作的标准方法,但您也可以使用replicate(仅为了好玩)。

t(replicate(1356, 4:22))

或者,你可以通过以下方式变得非常神秘:

t(`dim<-`(rep(c(4:22), 1356), c(19, 1356)))

确保所有方法都能产生相同的结果:

x <- function() matrix(4:22, 1356, 19, TRUE)
y <- function() t(replicate(1356, 4:22))
z <- function() t(`dim<-`(rep(c(4:22), 1356), c(19, 1356)))

identical(x(), y())
# [1] TRUE
identical(x(), z())
# [1] TRUE

......并以微秒的差异让自己(或不是)感到惊讶......

library(microbenchmark)
microbenchmark(x(), y(), z())
# Unit: microseconds
#  expr      min       lq      mean    median        uq      max neval
#   x()  293.631  295.639  309.5798  298.3165  327.5460  393.144   100
#   y() 2026.409 2076.166 2337.4346 2121.4595 2332.0885 8593.830   100
#   z()   94.159   98.620  188.2139  103.3070  115.8015 3881.459   100