问题标签 [tidyeval]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 在ggplot中循环变量
我想使用 ggplot 循环遍历多个列以创建多个图,但是在 for 循环中使用占位符会改变 ggplot 的行为。
如果我有这个:
这工作正常:
但这不会:
如果我想最终遍历 x、y 和 z,这是一个问题。有什么帮助吗?
r - dplyr:如何在函数中使用 group_by?
我想在另一个函数中使用该dplyr::group_by
函数,但我不知道如何将参数传递给这个函数。
有人可以提供一个工作示例吗?
r - 如何使用变量在ggplot中指定列名
我有一个 ggplot 命令
在一个函数里面。但我希望能够使用函数的参数来挑选出用作颜色和组的列。即我想要这样的东西
这样 ggplot 中使用的列由参数确定。例如对于 f("majr") 我们得到的效果是
但是对于 f("gender") 我们得到的效果是
我尝试过的一些事情:
不工作。也没有
r - 在函数内部使用 dplyr 时出错
我正在尝试组合一个函数,该函数从我的原始数据框创建一个子集,然后使用 dplyr 的 SELECT 和 MUTATE 根据萼片/花瓣的宽度和长度之和为我提供大/小条目的数量.
基本上,我希望函数返回大花的数量。但是,当我运行该函数时,出现以下错误 -
我究竟做错了什么?
r - 如何在带有 tidyr 和 ggplot2 的函数中使用 dplyr 的 enquo 和 quo_name
我正在尝试编写一个函数,它将即将发布的dplyr
开发版本中的 quosures 与tidyr::gather
and结合起来ggplot2
。到目前为止,它似乎适用于tidyr
,但我在绘图时遇到了麻烦。
以下功能似乎适用于tidyr's gather
:
但我不知道如何使情节发挥作用。我尝试使用!!gath
with ggplot2
,但没有奏效。
r - 在捕获环境时在操作后转发点中的表达式
我有一个fun_1
利用substitute()
其...
参数的函数,以及另一个具有实现模式fun_2
的签名的函数。我想在里面看到传递给. 这是我正在尝试做的一个说明。fun_2(...)
do.call(fun_1, dots)
fun_1()
fun_2()
...
fun_2()
我认为有足够的魔力rlang
来完成这项工作,但我无法弄清楚如何做。我可以修改fun_1
,只要
fun_1()
可以访问foo
和bar
- 该
do.call
模式在fun_2()
编辑:我也需要fun_2(list(foo, bar, NULL))
工作
r - 在 rlang 表达式的 quasiquotation 中使用预先存在的字符向量
有时,当使用dplyr
一个列名的字符向量时,该字符向量将用于对数据进行操作,例如:
在dplyr
0.5.0 及更早版本中,推荐的解决此问题的方法是使用verb_
下划线结构,如下所示:
verb_
现在不推荐使用这些函数,取而代之的是rlang
库引入的新的 tidy 评估框架 (dplyr.tidyverse.org/articles/programming.html)。
从dplyr
0.7.0 开始,以下作品无需任何特殊调整:
请注意,在 的开发版本中dplyr
,情况并非如此
动机
在闪亮的应用程序中选择列是一个很好的示例用例,这就是使用verb_
符号的方法
r - 整洁的评估编程和ggplot2
试图编写一个相对简单的包装器来生成一些图,但无法弄清楚如何指定分组变量的整洁评估,该分组变量指定为...
一个示例函数,该函数对变量进行分面但不通过分组进行区分......
很好用,但是如何区分不同的hair_color
?通常这是在内部完成的,aes()
但由于这是使用quos()
(即quo_group
)我应该(我认为)aes_()
使用的结果
我现在看不到或解决了多次阅读dplyr 编程的错误。
谁能指出我的错误/给我指路?
r - 如何将表示表达式的字符串传递给 dplyr 0.7 动词?
我想了解如何将表示表达式的字符串传递给 dplyr,以便字符串中提到的变量被评估为数据框中列上的表达式。关于这个主题的主要小插曲涵盖了 quosures 的传递,并且根本不讨论字符串。
很明显,在表示表达式时,quosures 比字符串更安全、更清晰,所以当可以使用 quosures 代替时,我们当然应该避免使用字符串。但是,当使用 R 生态系统之外的工具时,例如 javascript 或 YAML 配置文件,通常必须使用字符串而不是 quosures。
例如,假设我想要一个使用用户/调用者传入的表达式进行分组计数的函数。正如预期的那样,以下代码不起作用,因为 dplyr 使用非标准评估来解释group_by
.
在 dplyr 0.5 中,我们将使用标准评估,例如group_by_(.dots = groups)
,来处理这种情况。既然不推荐使用下划线动词,我们应该如何在 dplyr 0.7 中做这种事情?
在只是列名的表达式的特殊情况下,我们可以使用这个问题的解决方案,但它们不适用于更复杂的表达式2 * cyl
,例如不仅仅是列名。
r - 包中的 dplyr 0.7.0 tidyeval
前言
我通常dplyr
在我的包裹中使用。在此之前0.7.0
,我使用下划线版本的dplyr
动词来避免在R CMD CHECK
. 例如,代码:
会产生R CMD CHECK
注释:
相比之下,使用标准评估版:
没有产生这样的注释。
但是,在dplyrdplyr 0.7.0
的小插图编程中说,在包中包含函数(以避免注释)的适当语法是:dplyr
因此,新闻文件说“不再需要每个主要动词的下划线版本,因此这些功能已被弃用(但为了向后兼容而保留)。”
问题
小插图说上面的新语法不会产生R CMD check
NOTES,“前提是你也用 . 导入rlang::.data
了@importFrom rlang .data
。” 但是,当我运行代码时:
此错误是否类似于以下错误?
也就是说,对于某些函数,以包为前缀调用它们会产生错误?(可能与它们是否已被导出有关?)
评论
dplyr
顺便说一句,在 0.7.0 中是否有一种更简洁的方式来使用新语法编写对包友好的函数?特别是 的语法dplyr >=0.7.0
:
比以下的语法更冗长dplyr <0.7.0
:
随着更多变量被引用,详细程度也会增加。但是,我不想在带下划线的版本中使用不那么冗长的语法,因为它已被弃用。