使用purrr & modify_if替换嵌套的ifelse。

问题描述 投票:0回答:1

这是我想达到的目的,出于某种原因认为使用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

r loops nested purrr
1个回答
0
投票

你不需要 sapply 在这里。ifelse 是矢量化的,你可以直接使用它。

作为一个替代方案,您可以使用 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)

0
投票

我们也可以在 base R 不使用任何软件包或ifelse

unname(setNames(1:3, c(2, 3, 1))[as.character(vec1)])
© www.soinside.com 2019 - 2024. All rights reserved.