我试图在我的一个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))
我只是想知道我做错了什么。有人可以帮忙吗?多谢。
由于逻辑向量是length
1,我们可以使用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