2015-07-11 34 views
2

有没有一种方法可以比我的代码更简单呢?基本的R编程

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  

我只是很好奇,如果有,因为我发现我的代码“太简陋”编写这个simplier方式。谢谢。

回答

5

你可以直接从valuerev(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 –

1

您可以创建0的矩阵,并使用索引就摆在那里,你想

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