我正在尝试从R中的给定向量创建矩阵,但我不知道如何以简单的方式实现它。我在下面给出一个例子。矩阵是使用“cbind”函数制作的。
给出x为
[1,] 1
[2,] 3
[3,] 4
如何用简单的方法创建下面的矩阵?
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 0 0 0 0 0
[2,] 3 1 0 0 0 0
[3,] 4 3 1 0 0 0
[4,] 0 4 3 1 0 0
[5,] 0 0 4 3 1 0
[6,] 0 0 0 4 3 1
[7,] 0 0 0 0 4 3
[8,] 0 0 0 0 0 4
感谢您的帮助!
答案 0 :(得分:4)
使用append
和sapply
sapply(0:5, append, x = rep(0,5), values = c(1,3,4))
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] 1 0 0 0 0 0
# [2,] 3 1 0 0 0 0
# [3,] 4 3 1 0 0 0
# [4,] 0 4 3 1 0 0
# [5,] 0 0 4 3 1 0
# [6,] 0 0 0 4 3 1
# [7,] 0 0 0 0 4 3
# [8,] 0 0 0 0 0 4
答案 1 :(得分:3)
matrix(c(1,3,4,rep(0,6)),ncol=6,nrow=8)
你会得到一个警告,但是正确的矩阵。如果您不喜欢警告,请使用suppressWarnings:
suppressWarnings(matrix(c(1,3,4,rep(0,6)),ncol=6,nrow=8))
当然,如果你试图将这个功能抽象为更一般的情况,请小心使用该功能。
答案 2 :(得分:2)
这很有效。 (编辑:没有投票,可能也是电报?)想法是创建一个具有适当尺寸的全零矩阵,然后使用行/列算法(使用row()
和{ {1}}函数)在col()
介于0和2之间的元素中填充所需的值(即对角线和前两个较低的对角线)。这确实依赖于R ...中矩阵的列主要结构。
row-column
答案 3 :(得分:2)
这种方法非常直观:
x <- c(1,3,4)
n <- 6
m <- matrix(0,ncol=n,nrow=n+length(x)-1)
diag(m) <- 1
diag(m[-1,]) <- 3
diag(m[-c(1, 2),]) <- 4
可以轻松地自动分配对角线,例如使用“for”循环
for(i in seq_along(x)) diag(m[1:n + i - 1,]) <- x[i]
两种方法都产生:
R> m
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 0 0 0 0 0
[2,] 3 1 0 0 0 0
[3,] 4 3 1 0 0 0
[4,] 0 4 3 1 0 0
[5,] 0 0 4 3 1 0
[6,] 0 0 0 4 3 1
[7,] 0 0 0 0 4 3
[8,] 0 0 0 0 0 4