[英]How to pass a vector of variable names to a function in a within a function in r
[英]How to pass column names in function to carry out filter, select and sort actions within a function in R
我正在嘗試執行過濾器 select 並通過定義 function 來安排對數據框的操作。
下面是我試圖通過 function 復制的代碼:
mtcars %>%
filter(disp > 150) %>%
select(disp, hp) %>%
arrange(hp)
我創建的 function 如下:
process_data <- function(df, col_1, col_2){
df %>% filter(col_1 > 150) %>%
select(col_1, col_2)
}
process_data(df = mpg, col_1 = "disp", col_2 = "hp")
但是,當我嘗試執行時,出現以下錯誤:
錯誤:無法對不存在的列進行子集化。 x 列disp
不存在。
嘗試了多種傳遞列名的方法,但沒有用。
如果我們將字符串作為輸入傳遞,我們需要轉換為sym
並計算 ( !!
)
library(dplyr)
process_data <- function(df, col_1, col_2){
col_1 <- rlang::ensym(col_1)
col_2 <- rlang::ensym(col_2)
df %>% filter(!!col_1 > 150) %>%
select(!!col_1, !!col_2)
}
-測試
process_data(df = mtcars, col_1 = "disp", col_2 = "hp")
disp hp
Mazda RX4 160.0 110
Mazda RX4 Wag 160.0 110
Hornet 4 Drive 258.0 110
Hornet Sportabout 360.0 175
Valiant 225.0 105
Duster 360 360.0 245
Merc 280 167.6 123
Merc 280C 167.6 123
Merc 450SE 275.8 180
Merc 450SL 275.8 180
Merc 450SLC 275.8 180
Cadillac Fleetwood 472.0 205
Lincoln Continental 460.0 215
Chrysler Imperial 440.0 230
Dodge Challenger 318.0 150
AMC Javelin 304.0 150
Camaro Z28 350.0 245
Pontiac Firebird 400.0 175
Ford Pantera L 351.0 264
Maserati Bora 301.0 335
使用any_of
另一種解決方案:
process_data <- function(df, col_1, col_2){
df %>%
filter(col_1 > 150) %>%
select(any_of(c(col_1, col_2)))
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.