简体   繁体   English

R dplyr 将表达式作为参数传递给 function

[英]R dplyr pass expression as argument to function

I have a simple silly question, but sorry for so simple.我有一个简单的愚蠢问题,但很抱歉这么简单。

How do I pass an arithmetic expression as a function argument?如何将算术表达式作为 function 参数传递?

test_func <- function(data, myexpr){
  data %>% 
    filter(!! myexpr)
}

mtcars %>% 
  test_func(myexpr =  "cyl > 6")

Thanks in advance提前致谢

library(dplyr)

test_func <- function(data, myexpr){
  data %>% 
    filter(eval(parse(text  = myexpr)))
}

mtcars %>% 
  test_func(myexpr =  "cyl > 6")

Any of these seems to work with parsing expression: parse_expr() and parse_quo()其中任何一个似乎都适用于解析表达式: parse_expr()parse_quo()

library(rlang)
library(dplyr)

test_func1 <- function(data, myexpr){
  data %>% 
    filter(!!parse_expr(myexpr))
}

test_func2 <- function(data, myexpr){
  data %>% 
    filter(!!parse_quo(myexpr, env = global_env()))
}

mtcars %>% 
  test_func1(myexpr =  "cyl > 6")
#>                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
#> Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
#> Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
#> Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
#> Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
#> Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
#> Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
#> Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
#> Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
#> AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
#> Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
#> Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
#> Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
#> Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8

mtcars %>% 
  test_func2(myexpr =  "cyl > 6")
#>                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
#> Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
#> Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
#> Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
#> Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
#> Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
#> Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
#> Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
#> Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
#> AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
#> Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
#> Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
#> Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
#> Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8

Created on 2020-06-16 by the reprex package (v0.3.0)代表 package (v0.3.0) 于 2020 年 6 月 16 日创建

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 将表达式作为R中的函数参数传递 - Pass an expression as a function argument in R R,使用dplyr :: filter()和%in%将列名作为参数传递给函数 - R, pass column name as argument to function using dplyr::filter() and %in% R 中 dplyr 的过滤器中的 function 参数 - function argument in filter of dplyr in R 使用 stringr::str_extract 将参数传递给包含 dplyr 管道表达式 group_by 的函数 - Pass argument to a function containing dplyr piped expression group_by with stringr::str_extract 如何将 R Shiny 反应式表达式作为自定义 function 中的默认参数传递 - How to pass a R Shiny reactive expression as a default argument in a custom function 在R:传递列名作为参数并在函数中使用它与dplyr :: mutate()和lazyeval :: interp() - In R: pass column name as argument and use it in function with dplyr::mutate() and lazyeval::interp() 数据框列作为 dplyr R 函数的参数 - Data frame column as argument to dplyr R function 将行作为参数传递给R dplyr mutate中的函数 - Passing row as an argument to a function in R dplyr mutate 如何在 R function 和 dplyr 的 1 个参数中使用 2 个变量 - How to use 2 variables in 1 argument in a R function with dplyr 使用表达式作为dplyr参数的R函数汇总 - R function with expression as parameter for dplyr summarise
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM