2012-02-10 2 views

ответ

3

Вот один из способов.

t <- 11:15 
m <- vapply(seq_along(t), function(i) c(t[seq_len(i)], rep(t[i], length(t)-i)), numeric(length(t))) 
m 
#  [,1] [,2] [,3] [,4] [,5] 
#[1,] 11 11 11 11 11 
#[2,] 11 12 12 12 12 
#[3,] 11 12 13 13 13 
#[4,] 11 12 13 14 14 
#[5,] 11 12 13 14 15 

Вы можете использовать sapply тоже - немного короче, но и немного медленнее (вы не указали, что функция возвращает):

m <- sapply(seq_along(t), function(i) c(t[seq_len(i)], rep(t[i], length(t)-i))) 
4

Значение (I, J) коэффициент min (i, j):

m <- matrix(NA, nr=5, nc=5) # Empty matrix with the right size 
m <- pmin(col(m), row(m)) 
+0

Похоже, что это решение немного быстрее, чем @ Tommy's. –

+0

@ Vincent Я попытался обобщить ваш ответ на общий вектор t следующим образом: 'm <- pmin (t [col (m)], t [row (m)])', но это дает мне вектор размера nc * nr , поэтому я снова применил матричную команду – jmbarrios

+1

Это должно быть 'pmin (col (t), row (t))', , если ваша матрица действительно называется 't'. Я изменил имя матрицы от 't' до' m' , потому что 't' уже является функцией транспонирования. –

Смежные вопросы