如何在R中创建如下所示的矩阵

时间:2013-04-14 22:51:03

标签: r matrix

我正在尝试从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

感谢您的帮助!

4 个答案:

答案 0 :(得分:4)

使用appendsapply

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