在列表对象中将NaN / Inf / NA替换为0

时间:2017-03-09 14:04:05

标签: r

我在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?

2 个答案:

答案 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))