我有一个大小相似的矩阵列表。我需要使每个矩阵的上三角等于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
...
任何人都可以提供有关发生这种情况的原因的输入吗?
答案 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)