Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中的矩阵中得到对角元素_R_Matrix - Fatal编程技术网

在R中的矩阵中得到对角元素

在R中的矩阵中得到对角元素,r,matrix,R,Matrix,我正试图用R中的一个矩阵解决一个小问题。我在R中有下一个矩阵(alfa): 或者类似于带有NA的矩阵: [,1] [,2] [,3] [1,] 1 4 0 [2,] 2 0 NA [3,] 0 NA NA 如您所见,位于alfa对角下方的元素为零或NA。我尝试过使用行(alfa)和col(alfa)的代码,但无法获得预期的矩阵,例如: (row(alfa)+col(alfa)-1)%%ncol(alfa)!=0 我得到了这样一个结果,

我正试图用R中的一个矩阵解决一个小问题。我在R中有下一个矩阵(
alfa
):

或者类似于带有
NA
的矩阵:

     [,1] [,2] [,3]
[1,]    1    4    0
[2,]    2    0   NA
[3,]    0   NA   NA
如您所见,位于
alfa
对角下方的元素为零或
NA
。我尝试过使用
行(alfa)
col(alfa)
的代码,但无法获得预期的矩阵,例如:

(row(alfa)+col(alfa)-1)%%ncol(alfa)!=0
我得到了这样一个结果,在相反对角线上的上下元素都是
TRUE

      [,1]  [,2]  [,3]
[1,]  TRUE  TRUE FALSE
[2,]  TRUE FALSE  TRUE
[3,] FALSE  TRUE  TRUE
但是我只需要上面的元素,其余的元素应该用零或
NA
填充


非常感谢您的帮助。

f
f
lower.tri
几乎可以满足您的需要,但您需要反转行

f <- function(mat, diag = 0, offdiag = NA){
  rev_vec <- seq(ncol(mat), 1)
  j <- mat[,rev_vec]
  j[lower.tri(j)] <- offdiag
  diag(j) <- diag
  j[,rev_vec]
}
alfa[apply(lower.tri(alfa), 1, rev)] <- NA

alfa[apply(lower.tri(alfa),1,rev)]
lower.tri
几乎可以实现您想要的功能,但您需要反转行

alfa[apply(lower.tri(alfa), 1, rev)] <- NA

alfa[apply(lower.tri(alfa),1,rev)]当可再现数据得到认可时,提供一个小矩阵,比如
matrix(1:9,nrow=3)
,不是更简单吗?功能应该是一样的,不是吗?这行吗
m[(行(m)+列(m)-ncol(m)>0]是@thelatemail抱歉,我下次会接受你的推荐!!!哎呀,缺少
。应该是
alfa[(行(alfa)+col(alfa)-ncol(alfa))>0],而可再现数据是值得赞赏的,提供一个小矩阵,比如
matrix(1:9,nrow=3)
?功能应该是一样的,不是吗?这行吗
m[(行(m)+列(m)-ncol(m)>0]是@thelatemail抱歉,我下次会接受你的推荐!!!哎呀,缺少
。应该是
alfa[(行(alfa)+col(alfa)-ncol(alfa))>0]谢谢@agstudy。我应该在一个干净的会话中检查函数。谢谢@agstudy。我应该在一个干净的会话中检查函数。
alfa[apply(lower.tri(alfa), 1, rev)] <- NA