我在R中有一个列表对象,其中包含NaN / Inf / NA值:
dat <- list(a=matrix(c(2,0/0,10/0,NA),nrow=2), b=matrix(c(-3,0,NA,1),nrow=2))
如何将NaN / Inf / NA元素替换为0?
答案 0 :(得分:3)
我们可以通过replace
list
元素,将非有限值lapply
设为0
lapply(dat, function(x) replace(x, !is.finite(x), 0))
# [,1] [,2]
#[1,] 2 0
#[2,] 0 0
#$b
# [,1] [,2]
#[1,] -3 0
#[2,] 0 1
答案 1 :(得分:0)
您也可以通过检查x%%1==0
:
ls <- unlist(dat)
ls[is.na(ls%%1==0)] <- 0
relist(ls, skeleton = dat)
# $a
# [,1] [,2]
# [1,] 2 0
# [2,] 0 0
# $b
# [,1] [,2]
# [1,] -3 0
# [2,] 0 1
或@ akrun答案的单行代码:
lapply(dat, function(x) replace(x, is.na(x%%1==0), 0))