R 如何用行替换矩阵的非对角元素?
我想用a替换矩阵的非对角元素 数字序列。 我设法写了这样一篇文章:R 如何用行替换矩阵的非对角元素?,r,R,我想用a替换矩阵的非对角元素 数字序列。 我设法写了这样一篇文章: mat[outer(1:nrows(mat), 1:nrows(mat), function(i,j) j!=i)] <- seq(1:182) 我们可以试试 mat[lower.tri(mat, diag=FALSE)|upper.tri(mat, diag=FALSE)] <- 1:182 mat[lower.tri(mat,diag=FALSE)| upper.tri(mat,diag=FALSE)]Thx
mat[outer(1:nrows(mat), 1:nrows(mat), function(i,j) j!=i)] <- seq(1:182)
我们可以试试
mat[lower.tri(mat, diag=FALSE)|upper.tri(mat, diag=FALSE)] <- 1:182
mat[lower.tri(mat,diag=FALSE)| upper.tri(mat,diag=FALSE)]Thx,但它的作用与我的代码相同。我需要按行而不是按列填充数字。@RobM您没有提供一个小示例或预期的输出。@RobMt(mat)
给出了确切的输出。“我不想使用转置函数,因为我想保留特定的行名。”@Pascal请稍等。我可以删除它,也可以不删除它。你可以做你孩子气的活动。@akrun你能帮我吗?t
选项更直接,你能不能重命名行名(如果我理解正确的话)它是我喜欢保留的dim名称,有可能吗?DIMNAME可以用DIMNAME(m1)来更改。akrun可能有一个更简洁的方法,但这应该是可行的<代码>m[行(m)!=列(m)]
# [,1] [,2] [,3] [,4] [,5]
# a NA 1 2 3 4
# b 5 NA 6 7 8
# c 9 10 NA 11 12
# d 13 14 15 NA 16
# e 17 18 19 20 NA
mat[lower.tri(mat, diag=FALSE)|upper.tri(mat, diag=FALSE)] <- 1:182
mat[!diag(ncol(mat))] <- 1:182
m[!diag(ncol(m))] <- 1:20
out <- t(m)
dimnames(out) <- rev(dimnames(out))