簡體   English   中英

使用 purrr 和 modify_if 替換嵌套的 ifelse

[英]Replacement of nested ifelse using purrr & modify_if

這是我想要實現的目標,出於某種原因認為使用 purrr 和“modify_if”會更有效? 在應用程序中,它會迅速增長,因此速度/效率很重要。 這看起來很簡單,但我需要做的是,每個 ifelse 級別都需要幾個命令。

vec1 <- c(1,2,3)
vec1 <- sapply(
  vec1,function(x) ifelse(x == 1,2,
                          ifelse (x == 2,3,
                                  ifelse (x == 3,1,0))))
vec1 #output
[1] 2 3 1

另外,如果沒有其他條件,即如果不滿足謂詞,我該如何編寫ifelse代碼,我只想什么都不做? 只需使用if語句而不是ifelse

謝謝,J

這里不需要sapplyifelse是矢量化的,可以直接使用。

作為替代方案,您可以使用dplyr::recode

dplyr::recode(vec1, `1` = 2, `2` = 3, `3` = 1)
#[1] 2 3 1

或者case_when是嵌套ifelse語句的替代方案。

dplyr::case_when(vec1 == 1 ~2, vec1 == 2 ~3,  vec1 == 3 ~1)

我們也可以在base R中使用命名向量,而不使用任何包或 ifelse

unname(setNames(1:3, c(2, 3, 1))[as.character(vec1)])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM