Я написал функцию, которая преобразует значения Inf/NaN в R в NA. Функция выглядит следующим образом:Фактор и Inf/NaN
DSanity.replaceInfNan <- function(l)
{
l <- ifelse((is.infinite(l))|(is.nan(l)), NA, l);
return(l)
}
Однако, когда класс (л) является одним из факторов, эта функция возвращает объект класса целого числа. Любые решения для получения одного класса без явной проверки фактора класса? Ниже приведен пример.
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"
Если функция предназначена только для факторов, вы можете работать на уровнях/этикетках вместо этого. Если нет, то явная проверка кажется необходимой. Что в этом плохого? – tonytonov