2015-12-22 3 views
1

У меня есть эта матрицаЗаполнить матрицу с последовательностью значения

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

Я хочу, чтобы заполнить каждую строку с последовательностью этого числа

m <- c(4:22)

Последовательность correcly длиной 19, как количество столбцов матрицы, длина каждой строки матрицы. Как я могу это сделать?

+0

Попробуйте 'all1 <- matrix (c (4:22), ncol = 19, nrow = 1356, byrow = TRUE)' – DatamineR

ответ

2

Я думаю, вы должны вставить значения в определении матрицы, используя респ функцию:

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

Опция byrow говорит R, чтобы заполнить матрицу по строкам, а не колонка.

+3

Ему даже не нужно 'rep' из-за утилизации. Примечание: 'byrow = TRUE', а не' Y' – DatamineR

+0

Идеальный ... я не знал, как это сделать. – Diego

+0

В дополнение к примечанию об утилизации вам не нужно указывать аргументы, если вы разместите их в правильном порядке. 'matrix (4:22, 1356, 19, TRUE)' будет делать это. –

1

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 
Смежные вопросы