當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R NA “不可用”/缺失值


R語言 NA 位於 base 包(package)。

說明

NA是長度為 1 的邏輯常量,其中包含缺失值指示符。NA可以強製轉換為除原始向量之外的任何其他向量類型。也有常量NA_integer_,NA_real_,NA_complex_NA_character_支持缺失值的其他原子向量類型:所有這些都是預訂的中的單詞R語言。

通用函數 is.na 指示缺少哪些元素。

通用函數 is.na<- 將元素設置為 NA

通用函數anyNA以可能更快的方式實現any(is.na(x))(特別是對於原子向量)。

用法

NA
is.na(x)
anyNA(x, recursive = FALSE)

## S3 method for class 'data.frame'
is.na(x)

is.na(x) <- value

參數

x

一個R待測試對象:默認方法is.naanyNA處理原子向量、列表、對列表和NULL.

recursive

邏輯:anyNA 應該遞歸地應用於列表和配對列表嗎?

value

x 一起使用的合適索引向量。

細節

字符類型的 NA 與字符串 "NA" 不同。需要指定顯式缺失字符串的程序員應使用 NA_character_ (而不是 "NA" )或使用 is.na<- 將元素設置為 NA

is.naanyNA 是通用的:您可以編寫方法來處理特定類的對象,請參閱 InternalMethods

函數 is.na<- 可能提供一種更安全的方法來設置缺失。例如,它對於因子的表現有所不同。

數值計算使用NA通常會導致NA:一個可能的例外是NaN也涉及,在這種情況下可能會導致(這可能取決於R平台)。然而,這並不能得到保證,未來的 CPU 和/或編譯器的行為可能會有所不同。動態二進製翻譯也可能會影響這種行為(使用 valgrind,使用NA可能會導致NaN即使沒有NaN參與了)。

邏輯計算將 NA 視為缺失的 TRUE/FALSE 值,因此如果表達式不依賴於 NA 操作數,則可能返回 TRUEFALSE

anyNA 的默認方法處理沒有類的原子向量和 NULL 。它在具有類的對象上調用 any(is.na(x)) ,在列表和配對列表上調用 recursive = FALSE

應用於原子向量的 is.na 的默認方法返回與其參數 x 長度相同的邏輯向量,其中包含 TRUE 對於標記為 NA 的元素,或者對於數字或複數向量,包含 NaN ,否則FALSE。 (如果複數值的實部或虛部為 NANaN ,則複數值被視為 NA 。) dimdimnamesnames 屬性將複製到結果中。

默認方法也適用於列表和配對列表:
為了is.na,按元素計算結果為 false,除非該元素是長度為 1 的原子向量並且該向量的單個元素被視為NA或者NaN(請注意,任何is.na元素類的方法被忽略)。
anyNA(recursive = FALSE)工作方式與is.na;anyNA(recursive = TRUE)適用anyNA(使用方法分派)到每個元素。

is.na 的數據幀方法返回一個與數據幀具有相同維度的邏輯矩陣,並且其暗名稱取自數據幀的行和列名稱。

anyNA(NULL)是假的;is.na(NULL)logical(0)(從此不再警告R版本 3.5.0)。

例子

is.na(c(1, NA))        #> FALSE  TRUE
is.na(paste(c(1, NA))) #> FALSE FALSE

(xx <- c(0:4))
is.na(xx) <- c(2, 4)
xx                     #> 0 NA  2 NA  4
anyNA(xx) # TRUE

# Some logical operations do not return NA
c(TRUE, FALSE) & NA
c(TRUE, FALSE) | NA


## Measure speed difference in a favourable case:
## the difference depends on the platform, on most ca 3x.
x <- 1:10000; x[5000] <- NaN  # coerces x to be double
if(require("microbenchmark")) { # does not work reliably on all platforms
  print(microbenchmark(any(is.na(x)), anyNA(x)))
} else {
  nSim <- 2^13
  print(rbind(is.na = system.time(replicate(nSim, any(is.na(x)))),
              anyNA = system.time(replicate(nSim, anyNA(x)))))
}


## anyNA() can work recursively with list()s:
LL <- list(1:5, c(NA, 5:8), c("A","NA"), c("a", NA_character_))
L2 <- LL[c(1,3)]
sapply(LL, anyNA); c(anyNA(LL), anyNA(LL, TRUE))
sapply(L2, anyNA); c(anyNA(L2), anyNA(L2, TRUE))

## ... lists, and hence data frames, too:
dN <- dd <- USJudgeRatings; dN[3,6] <- NA
anyNA(dd) # FALSE
anyNA(dN) # TRUE

參考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

Chambers, J. M. (1998) Programming with Data. A Guide to the S Language. Springer.

也可以看看

NaNis.nan 等,以及實用函數 complete.cases

na.actionna.omitna.fail 了解如何調整方法來處理缺失值。

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 ‘Not Available’ / Missing Values。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。