问题标签 [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 - 为什么表达式 LHS 中的 `rlang::sym` 和 `rlang::quo_name` 表现相似?
使用 调用下面的函数foo(c("b"))
。输出显示为内联。
我很困惑为什么两者(1)df %>% mutate(!!x_ := 100 + !!x))
和 (2)df %>% mutate(!!x := 100 + !!x))
工作方式相同感到困惑;仅基于dplyr 编程配方(1) 应该可以工作。
r - 使用 dplyr::filter 的 tidyeval 方式是什么?
使用 调用下面的函数foo(c("b"))
。输出显示为内联。
什么是正确的写作方式df %>% filter(!!x > (!!x))
?
我已经包含了一个使用mutate
tidyeval 样式的示例,以将其与filter
.
r - dplyr 中基于字符串的过滤 - NSE
我想使用dplyr
新的 NSE 符号(版本 >= 0.6)来动态filter
处理我的数据。假设我有以下虚拟数据集:
如果现在我想过滤tofilter = "x"
大于 5 的值的列,我知道我可以这样做:
问题 1
如果我也想动态更改过滤运算符怎么办(假设我有一个 Shiny App,用户可以在其中动态selectInput
过滤大于 5、等于 5 或小于 5 的值的数据?
我想做的是:
显然,这是行不通的,我已经玩了一些rlang
quosore/symbols 等,但没有找到正确的方法来“引用”我的输入。
问题2
额外的问题是,如果我想应用多个过滤器怎么办?我是否需要循环,或者我可以创建一个过滤表达式列表并一次性应用它们?
一个例子是一个闪亮的应用程序,用户可以键入他/她想要应用于数据的多个条件,以便我们有一个动态变化的格式列表:
我们想动态地应用它们,这样输出就相当于:
我想这在某种意义上是问题 1 的一个子集,因为当我知道如何正确引用论点时,我认为我可以这样做:
但很高兴看看是否有更好的清洁方式
r - 连接quosures和字符串
我正在寻找一种连接 quosure 和结果为 quosure 的字符串的方法。实际上,如果我使用paste0()
and quo_name()
,我可以做到。但我想知道是否有更优雅的替代方法可以在我的包中编写函数。这是一个通用示例:
r - 调用参数后使用 dplyr `enquo`
我有一个大致遵循这种结构的函数:
问题是当我包含值检查时出现以下错误:
当我删除检查时,错误消失了。我怎样才能同时保留两者?
r - 使用 tidyeval 工具(如 `!!` 和 `:=`)构建列表
我正在寻找一种list
基于包中定义R
的tidyevalrlang
框架轻松构建的方法。
以下是我想要实现的目标:
我目前可以获得的是:
或者,添加quosure时它可能会变得更好一点:
不幸的是,我不知道如何从这里进一步前进。
换句话说,我想有一个类似的效果,就像我们可以在dplyr
包中得到的一样:
r - 使用 tidyeval 进行程序化回归建模
我正在尝试使用 tidyeval 进行编程。
我想编写一个函数来为选定的结果变量运行逻辑回归模型:
但是得到:
!enquo_outcome 中的错误:无效的参数类型
(注意真实场景涉及更复杂的功能)。
这可能吗?
r - 使用带公式的非标准评估
我正在创建一个使用非标准评估来跟踪列的含义的包。该包在函数之间传递一个数据框,这些函数执行不同的操作并执行相同的列集。非标准评估非常适合:
但是,我想要一个适用于公式的函数:
返回Error in !xcol : invalid argument type
。我尝试了, 和的各种组合quo()
,但基本问题是我不知道需要什么样的对象。enquo()
!!
lm
r - 使用 tidyeval 为“lm”编写函数
我正在尝试使用 tidyeval(非标准评估)围绕“lm”编写一个函数。使用基本 R NSE,它可以工作:
但是,我还没有想出如何使用tidyeval
and来编写这个函数rlang
。我认为substitute
应该替换为 beenquo
和 eval !!
。Hadley 的 Adv-R 中有一些提示,但我无法弄清楚。
r - dplyr tidyeval 等效于下划线函数版本
dplyr 的最新版本不推荐使用下划线版本的函数,例如 filter_,而支持tidy evaluation。
下划线形式的新形式是什么预期的新形式?如何使用 R CMD 检查避免未定义的符号?
是否有首选或更深思熟虑的形式?选项 C 最短,但在我的一些真实世界较大的数据集和更复杂的 dplyr 构造上速度较慢:
mutate_使用更复杂的语法还有另一个答案。