用lapply在矩阵中用零设置NA似乎不能很好地工作?

时间:2017-07-06 20:15:00

标签: r

我有这些矩阵。

matr <- list()

matr[[i]] <- c(0, NA, 3, 4, 4,
            0, 0, 3, 4, 1,
            0, 0, 0, NA, 1,
            0, 0, NA, 0, 3,
            0, 0, 0, 0, 0)
matr[[i]] <- matrix(matr[[i]], 5, 5)

我想使用以下代码将NA设置为零:

x <- lapply(matr,function(x) x[is.na(x) <- 0])

然后我得到了这个结果:

> x
[[1]]
numeric(0)

[[2]]
numeric(0)

[[3]]
numeric(0)

为什么它不返回矩阵?我的代码是否正确?有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

由于lapply适用于列表和返回列表,我认为这不是你想要的。 我认为在这里使用apply更合适。

尝试x <- apply(matr[[1]], 2, function(x){ x[is.na(x)] <- 0 x })

此处的数字2表示您希望按列操作而不是按行操作(第一个边距是行,第二个边距是列)。

另请注意,您已将<-运算符放在括号内,这是一个错误的sintax。

编辑:

似乎我误解了你的问题。 以下是适用于整个列表的代码:

lapply(matr, function(x){ apply(x, 2, function(y){ y[is.na(y)] <- 0 y }) })