2015-07-11 2 views
2

Есть ли способ кодировать это проще, чем мое?Basic R Programming

value = c(0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0) 
first = matrix(value, nrow=6) 
second = matrix(rev(first),nrow=6) #reverse vector "value" 
output10 = cbind(first,second) 
output10  

Я просто очень интересно, если есть способ проще кодировать это, потому что я считаю, мои коды «слишком рудиментарным». Благодарю.

ответ

5

Вы можете непосредственно создать матрицу результата от конкатенации value и rev(value):

value <- c(0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,1,0,0) 
output10 <- matrix(c(value, rev(value)), nrow=6) 
+0

это хороший ответ, +1 –

1

Вы можете создать матрицу 0s и использовать индексацию, чтобы положить в 1s, где вы хотите

mm <- matrix(0, 6, 6) 
mm[col(mm) == row(mm) + 1 | col(mm) == row(mm) - 1] <- 1 
mm 

#  [,1] [,2] [,3] [,4] [,5] [,6] 
# [1,] 0 1 0 0 0 0 
# [2,] 1 0 1 0 0 0 
# [3,] 0 1 0 1 0 0 
# [4,] 0 0 1 0 1 0 
# [5,] 0 0 0 1 0 1 
# [6,] 0 0 0 0 1 0 
+1

Это гораздо лучше, чем обобщение для попыток установить центральные диагонали на 1. – MichaelChirico