使用lapply在矩阵列表的上三角中创建0

时间:2018-08-16 18:37:08

标签: r matrix lapply

我有一个大小相似的矩阵列表。我需要使每个矩阵的上三角等于0。我可以使用以下方法使单个矩阵的上三角等于0:

matrix[upper.tri(matrix)] <- 0

当我尝试使用lapply将其应用于矩阵列表时,它将整个矩阵列表替换为0。例如:

list.matrix <- lapply(list.matrix, function (x) x[upper.tri(x)] <- 0)

$`matrix1`
[1] 0
$`matrix2`
[1] 0
...

任何人都可以提供有关发生这种情况的原因的输入吗?

2 个答案:

答案 0 :(得分:2)

此问题已通过将lapply中的函数作为新函数来解决:

f <- function(x) {
  x[upper.tri(x)] <- 0
  x
}

如此处建议的:lapply to turn specified matrix elements within list to NA

答案 1 :(得分:1)

我们可以使用replace

f <- function(x) replace(x, upper.tri(x), 0)
f(m1)

数据

m1 <- matrix(1:9, 3, 3)