r语言 - 如何在 dplyr 中链接 ifelse 语句



我试图在我的一个R函数中链接ifelse语句。基本上我想做的是:

do.something <- function (df, cond=TRUE){
df %>% ifelse(cond, do something, do something else)
}

以mtcars数据集为例:

select.vars <- function (df, cond=TRUE){
df %>% ifelse(cond, select(., mpg,wt), select(., hp, wt))
}
select.vars(mtcars )

错误消息:

Error in ifelse(., cond, select(., mpg, wt), select(., hp, wt)) : unused argument (select(., hp, wt))

我只是想知道我做错了什么。有人可以帮忙吗?多谢。

由于逻辑向量是length1,我们可以使用if/else条件

select.vars <- function (df, cond=TRUE){
if(cond){
df %>%
select(mpg, wt)
} else {
df %>%
select(hp, wt)
}
}
select.vars(mtcars )
最好

为此目的使用if/else,但如果我们需要ifelse,可以选择在select中使用ifelse

select.vars <- function (df, cond=TRUE){
df %>%
select(ifelse(rep(cond, 2), c('mpg', 'wt'), c('hp', 'wt')))     

}
select.vars(mtcars)

> 您可以使用括在括号中的if

select.vars <- function (df, cond=TRUE){
df %>% {`if`(cond, select(., mpg,wt), select(., hp, wt))}
}
select.vars(mtcars )
mpg    wt
Mazda RX4           21.0 2.620
Mazda RX4 Wag       21.0 2.875
Datsun 710          22.8 2.320
Hornet 4 Drive      21.4 3.215
Hornet Sportabout   18.7 3.440
Valiant             18.1 3.460
Duster 360          14.3 3.570
Merc 240D           24.4 3.190
Merc 230            22.8 3.150
Merc 280            19.2 3.440
Merc 280C           17.8 3.440
Merc 450SE          16.4 4.070
Merc 450SL          17.3 3.730
Merc 450SLC         15.2 3.780
Cadillac Fleetwood  10.4 5.250
Lincoln Continental 10.4 5.424
Chrysler Imperial   14.7 5.345
Fiat 128            32.4 2.200
Honda Civic         30.4 1.615
Toyota Corolla      33.9 1.835
Toyota Corona       21.5 2.465
Dodge Challenger    15.5 3.520
AMC Javelin         15.2 3.435
Camaro Z28          13.3 3.840
Pontiac Firebird    19.2 3.845
Fiat X1-9           27.3 1.935
Porsche 914-2       26.0 2.140
Lotus Europa        30.4 1.513
Ford Pantera L      15.8 3.170
Ferrari Dino        19.7 2.770
Maserati Bora       15.0 3.570
Volvo 142E          21.4 2.780

最新更新