我试图在我的一个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))
我只是想知道我做错了什么。任何人都可以帮忙吗?非常感谢。
答案 0 :(得分:3)
由于逻辑向量为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
,则可以选择在ifelse
select
select.vars <- function (df, cond=TRUE){
df %>%
select(ifelse(rep(cond, 2), c('mpg', 'wt'), c('hp', 'wt')))
}
select.vars(mtcars)
答案 1 :(得分:1)
您可以使用括号中的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