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


R ifelse 條件元素選擇


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

說明

ifelse 返回一個與 test 形狀相同的值,該值填充有從 yesno 中選擇的元素,具體取決於 test 的元素是 TRUE 還是 FALSE

用法

ifelse(test, yes, no)

參數

test

可以強製為邏輯模式的對象。

yes

返回 test 的 true 元素的值。

no

返回 test 的 false 元素的值。

細節

如果yesno太短,它們的元素將被回收。當且僅當 test 的任何元素為 true 時才會評估 yes ,對於 no 也類似。

test 中的缺失值給出了結果中的缺失值。

test 具有相同長度和屬性(包括維度和 "class" )的向量,並且數據值來自 yesno 的值。答案的模式將從邏輯上進行強製,以首先適應從 yes 獲取的任何值,然後適應從 no 獲取的任何值。

警告

結果的模式可能取決於 test 的值(參見示例),結果的類屬性(參見 oldClass )取自 test 。並且可能不適合從 yesno 中選擇的值。

有時最好使用諸如

  (tmp <- yes; tmp[!test] <- no[!test]; tmp)

,可能擴展為處理 test 中的缺失值。

進一步注意,每當 test 是一個簡單的真/假結果時,即當 length(test) == 1 時,if(test) yes else no 效率更高,並且通常比 ifelse(test, yes, no) 更可取。

函數的 srcref 屬性經過特殊處理:如果 test 是一個簡單的 true 結果,並且 yes 計算結果為具有 srcref 屬性的函數,則 ifelse 返回 yes 包括其屬性(這同樣適用於false testno 參數)。此函數僅用於向後兼容,隻要 yesno 是函數,就應使用 if(test) yes else no 形式。

例子

x <- c(6:-4)
sqrt(x)  #- gives warning
sqrt(ifelse(x >= 0, x, NA))  # no warning

## Note: the following also gives the warning !
ifelse(x >= 0, sqrt(x), NA)


## ifelse() strips attributes
## This is important when working with Dates and factors
x <- seq(as.Date("2000-02-29"), as.Date("2004-10-04"), by = "1 month")
## has many "yyyy-mm-29", but a few "yyyy-03-01" in the non-leap years
y <- ifelse(as.POSIXlt(x)$mday == 29, x, NA)
head(y) # not what you expected ... ==> need restore the class attribute:
class(y) <- class(x)
y
## This is a (not atypical) case where it is better *not* to use ifelse(),
## but rather the more efficient and still clear:
y2 <- x
y2[as.POSIXlt(x)$mday != 29] <- NA
## which gives the same as ifelse()+class() hack:
stopifnot(identical(y2, y))


## example of different return modes (and 'test' alone determining length):
yes <- 1:3
no  <- pi^(1:4)
utils::str( ifelse(NA,    yes, no) ) # logical, length 1
utils::str( ifelse(TRUE,  yes, no) ) # integer, length 1
utils::str( ifelse(FALSE, yes, no) ) # double,  length 1

參考

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

也可以看看

if

相關用法


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