我有这个矩阵
all1 <- matrix(ncol=19,nrow=1356))
我想用这个数字的序列填充每一行
m <- c(4:22)
序列的长度恰好为19,与矩阵的列数一样,矩阵的每一行的长度。 我怎么能这样做?
答案 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