2017-03-09 90 views
3

我與NaN的/ INF/NA值R 2具有一個列表對象更換的NaN/INF/NA至0:在一個列表對象

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 ?

回答

3

我們可以通過遍歷的list元素與lapply

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 
0

replace 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)) 
相關問題