我有一個if回圈而不需要邏輯檢查。
但是檢查是 x==2
以便
> x<-2
> x==2
[1] TRUE
然而當
> x<-NA
> x==2
[1] NA
我該如何處理這個問題?我在for回圈中使用此檢查并且回圈停止執行。當x<-NA, 那么x==2應該回傳FALSE
uj5u.com熱心網友回復:
您可能想嘗試:
x <- 2
ifelse(is.na(x), FALSE, x == 2)
#> [1] TRUE
x <- NA
ifelse(is.na(x), FALSE, x == 2)
#> [1] FALSE
uj5u.com熱心網友回復:
1)首先確保 x 不是 NA,然后與所需的檢查進行 AND。如果 x 是 NA 那么它會減少到 FALSE & NA 并且等于 FALSE。
x <- c(1, NA, 2) # test input
(!is.na(x)) & x == 2
## [1] FALSE FALSE TRUE
2)如果 x 是標量,那么這也有效,因為 isTRUE(X) 僅在引數為 TRUE 時才為 TRUE,如果它是其他任何內容,包括 NA,則為 FALSE。
x <- 2
isTRUE(x == 2)
## [1] TRUE
x <- 0
isTRUE(x == 2)
## [1] FALSE
x <- NA
isTRUE(x == 2)
## [1] FALSE
2a)或者如果 x 不一定是標量,我們可以像這樣修改它
x <- c(1, NA, 2) # test input
sapply(x == 2, isTRUE)
## [1] FALSE FALSE TRUE
2b)或
x <- c(1, NA, 2) # test input
Vectorize(isTRUE)(x == 2)
## [1] FALSE FALSE TRUE
uj5u.com熱心網友回復:
使用%in%代替==which 可能會解決此問題。
x <- 2
x %in% 2
#[1] TRUE
x <- NA
x %in% 2
#[1] FALSE
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/399201.html
