例如我有一个 2*3 矩阵
[,1] [,2] [,3]
[1,] 2 4 6
[2,] 3 5 7
Run Code Online (Sandbox Code Playgroud)
我想要一个 3*3 的矩阵,在 R 的对角线上插入 1 输出:
[,1] [,2] [,3]
[1,] 1 4 6
[2,] 2 1 7
[3,] 3 5 1
Run Code Online (Sandbox Code Playgroud)
一种选择可能是:
mat_new <- `diag<-`(matrix(ncol = ncol(mat), nrow = nrow(mat) + 1, 0), 1)
mat_new[mat_new == 0] <- mat
[,1] [,2] [,3]
[1,] 1 4 6
[2,] 2 1 7
[3,] 3 5 1
Run Code Online (Sandbox Code Playgroud)
或者原始想法的变体(由@Henrik 提出):
mat_new <- diag(ncol(mat))
mat_new[mat_new == 0] <- mat
Run Code Online (Sandbox Code Playgroud)
样本数据:
mat <- structure(2:7, .Dim = 2:3, .Dimnames = list(c("[1,]", "[2,]"),
NULL))
Run Code Online (Sandbox Code Playgroud)
使用append。
unname(mapply(function(x, y) append(x, 1, y), as.data.frame(m), 1:ncol(m) - 1))
# [,1] [,2] [,3]
# [1,] 1 4 6
# [2,] 2 1 7
# [3,] 3 5 1
Run Code Online (Sandbox Code Playgroud)
或者使用replace.
replace(diag(3), diag(3) < 1, m)
# [,1] [,2] [,3]
# [1,] 1 4 6
# [2,] 2 1 7
# [3,] 3 5 1
Run Code Online (Sandbox Code Playgroud)
数据:
m <- structure(2:7, .Dim = 2:3)
Run Code Online (Sandbox Code Playgroud)