我有这些矩阵。
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)
为什么它不返回矩阵?我的代码是否正确?有什么帮助吗?
答案 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
})
})