在dplyr动词中将字符串作为参数传递

安德烈

我希望能够为dplyr动词定义参数

condition <- "dist > 50"

然后在dplyr函数中使用这些字符串

require(ggplot2)
ds <- cars
ds1 <- ds %>%
   filter (eval(condition))
ds1

但这会引发错误

Error: filter condition does not evaluate to a logical vector. 

该代码应评估为:

  ds1<- ds %>%
     filter(dist > 50)
  ds1

导致 :

ds1

   speed dist
1     14   60
2     14   80
3     15   54
4     18   56
5     18   76
6     18   84
7     19   68
8     20   52
9     20   56
10    20   64
11    22   66
12    23   54
13    24   70
14    24   92
15    24   93
16    24  120
17    25   85

题:

如何将字符串作为dplyr动词的参数传递

维贝斯利

自2014年以来,使用rlang的准引号可能有两种新方法

常规的硬编码过滤器语句。为了便于比较,该语句dist > 50直接包含在中dplyr::filter()

library(magrittr)

# The filter statement is hard-coded inside the function.
cars_subset_0 <- function( ) {
  cars %>%
    dplyr::filter(dist > 50)
}
cars_subset_0()

结果:

   speed dist
1     14   60
2     14   80
3     15   54
4     18   56
...
17    25   85

NSE的rlang方法(非标准评估)。使用dplyr小插图编程中所述,该语句dist > 50由处理rlang::enquo(),“使用某种黑魔法查看参数,查看用户键入的内容,并将该值作为确定值返回”。然后,rlang!!取消对输入引用,以便“在周围的上下文中立即对其进行评估”。

# The filter statement is evaluated with NSE.
cars_subset_1 <- function( filter_statement ) {
  filter_statement_en <- rlang::enquo(filter_statement)
  message("filter statement: `", filter_statement_en, "`.")

  cars %>%
    dplyr::filter(!!filter_statement_en)
}
cars_subset_1(dist > 50)

结果:

filter statement: `~dist > 50`.
<quosure>
expr: ^dist > 50
env:  global
   speed dist
1     14   60
2     14   80
3     15   54
4     18   56
17    25   85

rlang方法传递字符串。该语句"dist > 50"作为显式字符串传递给函数,并由解析为表达式rlang::parse_expr(),然后由取消引用!!

# The filter statement is passed a string.
cars_subset_2 <- function( filter_statement ) {
  filter_statement_expr <- rlang::parse_expr(filter_statement)
  message("filter statement: `", filter_statement_expr, "`.")

  cars %>%
    dplyr::filter(!!filter_statement_expr)
}
cars_subset_2("dist > 50")

结果:

filter statement: `>dist50`.
   speed dist
1     14   60
2     14   80
3     15   54
4     18   56
...
17    25   85

使用,事情变得更简单dplyr::select()显式字符串只需要!!

# The select statement is passed a string.
cars_subset_2b <- function( select_statement ) {
  cars %>%
    dplyr::select(!!select_statement)
}
cars_subset_2b("dist")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在SQL命令中将字符串作为datetime参数传递

来自分类Dev

在ddply中将字符串作为参数传递

来自分类Dev

在Powershell中将字符串变量作为参数传递

来自分类Dev

在bash中将字符串或数组作为参数传递

来自分类Dev

在方法重载中将字符串作为参数传递

来自分类Dev

为什么在函数参数中将字符串作为const字符串传递

来自分类Dev

在bash中将字符串作为函数的参数传递时,字符串被剪切

来自分类Dev

传递替换字符串作为参数

来自分类Dev

传递空字符串作为参数

来自分类Dev

在dplyr :: mutate中将字符串作为变量名传递

来自分类Dev

将字符串参数传递给函数作为dplyr中的数据框列名称

来自分类Dev

如何在glShaderSource中将字符串作为GLchar **(char **)参数传递?

来自分类Dev

在C#中的SQL查询中将字符串数组作为参数传递

来自分类Dev

如何在Handlebars帮助器表达式中将字符串作为参数传递?

来自分类Dev

如何在bash脚本中将字符串或变量作为awk的多个参数传递?

来自分类Dev

如何使用C#在Python中将字符串作为命令行参数传递

来自分类Dev

如何在CAPL中将字符串作为用户定义的函数参数传递

来自分类Dev

在.Net Framework 4.7.2 WebApi中将字符串“ BIN”作为路由参数传递

来自分类Dev

如何在C中将字符串作为参数传递给线程

来自分类Dev

在Hive Query(HQL)中将字符串数组作为参数传递

来自分类Dev

在函数中将字符串作为参数传递时如何保留列名

来自分类Dev

Flask Python-Google Chart JavaScript无法在HTML页面中将字符串作为参数传递

来自分类Dev

如何在Handlebars帮助器表达式中将字符串作为参数传递?

来自分类Dev

在C#中的SQL查询中将字符串数组作为参数传递

来自分类Dev

在JS中将“字符串”或布尔值作为参数传递是不好的做法吗?

来自分类Dev

从脚本中将包含空格的字符串作为命令行参数传递

来自分类Dev

如何使用C#在Python中将字符串作为命令行参数传递

来自分类Dev

我如何在鱼壳中将函数参数作为字符串传递

来自分类Dev

在 C 中将字符串文字作为参数传递时出现分段错误

Related 相关文章

  1. 1

    在SQL命令中将字符串作为datetime参数传递

  2. 2

    在ddply中将字符串作为参数传递

  3. 3

    在Powershell中将字符串变量作为参数传递

  4. 4

    在bash中将字符串或数组作为参数传递

  5. 5

    在方法重载中将字符串作为参数传递

  6. 6

    为什么在函数参数中将字符串作为const字符串传递

  7. 7

    在bash中将字符串作为函数的参数传递时,字符串被剪切

  8. 8

    传递替换字符串作为参数

  9. 9

    传递空字符串作为参数

  10. 10

    在dplyr :: mutate中将字符串作为变量名传递

  11. 11

    将字符串参数传递给函数作为dplyr中的数据框列名称

  12. 12

    如何在glShaderSource中将字符串作为GLchar **(char **)参数传递?

  13. 13

    在C#中的SQL查询中将字符串数组作为参数传递

  14. 14

    如何在Handlebars帮助器表达式中将字符串作为参数传递?

  15. 15

    如何在bash脚本中将字符串或变量作为awk的多个参数传递?

  16. 16

    如何使用C#在Python中将字符串作为命令行参数传递

  17. 17

    如何在CAPL中将字符串作为用户定义的函数参数传递

  18. 18

    在.Net Framework 4.7.2 WebApi中将字符串“ BIN”作为路由参数传递

  19. 19

    如何在C中将字符串作为参数传递给线程

  20. 20

    在Hive Query(HQL)中将字符串数组作为参数传递

  21. 21

    在函数中将字符串作为参数传递时如何保留列名

  22. 22

    Flask Python-Google Chart JavaScript无法在HTML页面中将字符串作为参数传递

  23. 23

    如何在Handlebars帮助器表达式中将字符串作为参数传递?

  24. 24

    在C#中的SQL查询中将字符串数组作为参数传递

  25. 25

    在JS中将“字符串”或布尔值作为参数传递是不好的做法吗?

  26. 26

    从脚本中将包含空格的字符串作为命令行参数传递

  27. 27

    如何使用C#在Python中将字符串作为命令行参数传递

  28. 28

    我如何在鱼壳中将函数参数作为字符串传递

  29. 29

    在 C 中将字符串文字作为参数传递时出现分段错误

热门标签

归档