2016-03-01 4 views
2

Мне предоставили некоторые данные для работы с R в векторной форме. Элементы этого вектора размера n (n + 1)/2 должны быть перегруппированы в симметричную матрицу. Пример:R/создание симметричной матрицы из вектора элементов нижнего треугольника

n<-4 
x<-seq(from=1,to=n*(n+1)/2) 

Что такое хороший способ, чтобы получить

mat<- 1 2 3 4 
     2 5 6 7 
     3 6 8 9 
     4 7 9 10 

ответ

4

Мы можем использовать lower.tri

m1 <- matrix(, n, n) 
m1[lower.tri(m1, diag=TRUE)] <- x 
m2 <- t(m1) 
m2[lower.tri(m2, diag=TRUE)] <- x 

Или вместо того, чтобы делать два последних шага

pmax(m1, t(m1), na.rm=TRUE) 
#  [,1] [,2] [,3] [,4] 
#[1,] 1 2 3 4 
#[2,] 2 5 6 7 
#[3,] 3 6 8 9 
#[4,] 4 7 9 10 
Смежные вопросы