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待測試對象:默認方法 |
recursive |
邏輯: |
value |
與 |
細節
字符類型的 NA
與字符串 "NA"
不同。需要指定顯式缺失字符串的程序員應使用 NA_character_
(而不是 "NA"
)或使用 is.na<-
將元素設置為 NA
。
is.na
和 anyNA
是通用的:您可以編寫方法來處理特定類的對象,請參閱 InternalMethods 。
函數 is.na<-
可能提供一種更安全的方法來設置缺失。例如,它對於因子的表現有所不同。
數值計算使用NA
通常會導致NA
:一個可能的例外是NaN
也涉及,在這種情況下可能會導致(這可能取決於R平台)。然而,這並不能得到保證,未來的 CPU 和/或編譯器的行為可能會有所不同。動態二進製翻譯也可能會影響這種行為(使用 valgrind,使用NA
可能會導致NaN
即使沒有NaN
參與了)。
邏輯計算將 NA
視為缺失的 TRUE/FALSE
值,因此如果表達式不依賴於 NA
操作數,則可能返回 TRUE
或 FALSE
。
anyNA
的默認方法處理沒有類的原子向量和 NULL
。它在具有類的對象上調用 any(is.na(x))
,在列表和配對列表上調用 recursive = FALSE
。
值
應用於原子向量的 is.na
的默認方法返回與其參數 x
長度相同的邏輯向量,其中包含 TRUE
對於標記為 NA
的元素,或者對於數字或複數向量,包含 NaN
,否則FALSE
。 (如果複數值的實部或虛部為 NA
或 NaN
,則複數值被視為 NA
。) dim
、 dimnames
和 names
屬性將複製到結果中。
默認方法也適用於列表和配對列表:
為了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.
也可以看看
NaN
、 is.nan
等,以及實用函數 complete.cases
。
相關用法
- R NotYet 尚未實現的函數和未使用的參數
- R NULL 空對象
- R NumericConstants 數字常量
- R file.path 構造文件路徑
- R grep 模式匹配和替換
- R getwd 獲取或設置工作目錄
- R vector 向量 - 創建、強製等
- R lapply 對列表或向量應用函數
- R dump R 對象的文本表示
- R Sys.getenv 獲取環境變量
- R rank 樣本排名
- R getDLLRegisteredRoutines DLL 中 C/Fortran 例程的反射信息
- R pushBack 將文本推回連接
- R strsplit 分割字符向量的元素
- R seq.Date 生成規則的日期序列
- R invisible 將打印模式更改為不可見
- R noquote “無引號”字符串打印類
- R warning 警告信息
- R rapply 遞歸地將函數應用於列表
- R basename 操作文件路徑
- R with 評估數據環境中的表達式
- R formals 訪問和操縱形式參數
- R icuSetCollate 按 ICU 設置整理
- R search 給出 R 對象的搜索路徑
- R Defunct 將對象標記為已失效
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 ‘Not Available’ / Missing Values。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。