我有一个 5x4 矩阵,我想选择除第 2 到 4 行和第 2 到 3 列中的元素之外的所有元素(设置为 0)。基本上,沿矩阵“边缘”的所有元素都应设置为 0 . 目前,我的代码是
mat[ -(2:4), -(2:3) ] <- 0
Run Code Online (Sandbox Code Playgroud)
但是,这(取消)以 OR 方式选择元素,因此,只有矩阵的角设置为 0。如何以 AND 方式选择它们?
将函数rowandcol与逻辑运算结合使用。以下内容之所以有效,是因为 R 的矩阵按列优先顺序排列。
mat <- matrix(seq.int(5*4), nrow = 5)
mat[ !(row(mat) %in% 2:4) | !(col(mat) %in% 2:3) ] <- 0
mat
# [,1] [,2] [,3] [,4]
#[1,] 0 0 0 0
#[2,] 0 7 12 0
#[3,] 0 8 13 0
#[4,] 0 9 14 0
#[5,] 0 0 0 0
Run Code Online (Sandbox Code Playgroud)