R 因子和Inf/NaN

R 因子和Inf/NaN,r,nan,na,R,Nan,Na,我编写了一个函数,将R中的Inf/NaN值转换为NA。功能如下: DSanity.replaceInfNan <- function(l) { l <- ifelse((is.infinite(l))|(is.nan(l)), NA, l); return(l) } DSanity.replaceinfn如果您的函数仅针对因子设计,则可以在级别/标签上操作。如果没有,则似乎需要进行明确的检查。它有什么不好?你能解释一下为什么一个函数返回整数,而另一个函数返回一个

我编写了一个函数,将R中的Inf/NaN值转换为NA。功能如下:

DSanity.replaceInfNan <- function(l)
{
     l <- ifelse((is.infinite(l))|(is.nan(l)), NA, l);
     return(l)
}

DSanity.replaceinfn如果您的函数仅针对因子设计,则可以在级别/标签上操作。如果没有,则似乎需要进行明确的检查。它有什么不好?你能解释一下为什么一个函数返回整数,而另一个函数返回一个因子,尽管这两个函数看起来是等价的吗?谢谢。在
ifelse
的帮助页面中有一条警告,指出结果的模式可能取决于“test”的值,这是
ifelse
调用的第一个参数。尽管第三个参数显然是一个因子,但第一个参数不是,这就是R用来确定返回模式的参数。感谢澄清。
dput(m)    
structure(c(2L, 2L, 3L, 4L, 5L, 6L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 
    9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 
    22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 2L, 2L, 3L, 4L, 5L, 6L, 
    7L, 8L, 9L, 10L, 11L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 
    2L, 3L, 4L, 5L, 6L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 
    12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 
    25L, 26L, 27L, 2L, 3L, 4L, 2L, 3L, 4L, 2L, 3L, 4L, 5L, 6L, 7L, 
    8L, 9L), .Label = c("1984", "1985", "1986", "1987", "1988", "1989", 
    "1990", "1991", "1992", "1993", "1994", "1995", "1996", "1997", 
    "1998", "1999", "2000", "2001", "2002", "2003", "2004", "2005", 
    "2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013"
    ), class = "factor")

class(DSanity.replaceInfNan(m))  
"integer"
DSanity.replaceInfNan <- function(l) { 
  l[is.infinite(l) | is.nan(l)] <- NA 
  return(l)
}