问题标签 [rlang]
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 - R dplyr 对仅通过其字符串名称知道的列进行操作
我正在努力使用dplyr
R 中的编程来操作数据框的列,这些列仅由它们的字符串名称知道。我知道最近有一个更新来dplyr
支持 quosures 等,我在这里回顾了我认为新的“使用 dplyr 编程”文章的相关组件:http: //dplyr.tidyverse.org/articles/programming .html。但是,我仍然无法做我想做的事。
我的情况是我仅通过字符串名称知道数据框的列名。因此,我不能在调用函数或什至脚本中使用非标准评估,dplyr
其中列名可能会在运行之间发生变化,因为我通常无法硬编码未引用的(即“裸”)列名. 我想知道如何解决这个问题,我猜我用新的引用/取消引用语法忽略了一些东西。
例如,假设我有定义数据分布的截止百分位数的用户输入。用户可以使用他/她想要的任何百分位数运行代码,他/她选择的百分位数将改变输出。在分析中,使用所用百分位数的名称在中间数据框中创建一列;因此,此列的名称会根据用户输入的截止百分位数而变化。
下面是一个最小的例子来说明。我想用截止百分位数的各种值调用该函数。我希望命名的数据框MPGCutoffs
有一个根据所选截止分位数命名的列(这目前在下面的代码中有效),并且我想稍后对该列名进行操作。由于这个列名的普遍性,我在pctCutoff
写函数的时候只能从输入的角度知道,所以我需要一种方法在只知道定义的字符串的情况下对其进行操作probColName
,它遵循基于预定义的模式关于 的值pctCutoff
。
该dplyr::filter()
声明是我无法正常运行的。我试过了:
dplyr::filter( mpg > probColName )
- 没有错误,但没有返回行。
dplyr::filter( mpg > !!probColName )
- 没有错误,但没有返回行。
我还看到了一些例子,我可以将类似的东西传递quo(P95)
给函数,然后在对dplyr::filter()
;的调用中取消引用它。我已经让它工作了,但它并没有解决我的问题,因为它需要在函数之外对变量名进行硬编码。例如,如果我这样做并且用户传递的百分位数是 0.90,则调用dplyr::filter()
失败,因为创建的列是 namedP90
而不是P95
。
任何帮助将不胜感激。我希望有一个简单的解决方案,我只是忽略了。
r - 将函数绑定到环境以访问存储的变量,有什么缺点?
问题:
我需要一个只接受一个参数但需要访问其他一些变量的函数。我不想将这些存储在.GlobalEnv
.
当前解决方案: 使用一个接受所有需要参数的函数,创建另一个适应环境的函数。
例子:
我坚信这种方法有缺点,但我无法确定这些缺点可能是什么。如果你能帮助我,我会很高兴。
r - 使用 tidyeval 工具(如 `!!` 和 `:=`)构建列表
我正在寻找一种list
基于包中定义R
的tidyevalrlang
框架轻松构建的方法。
以下是我想要实现的目标:
我目前可以获得的是:
或者,添加quosure时它可能会变得更好一点:
不幸的是,我不知道如何从这里进一步前进。
换句话说,我想有一个类似的效果,就像我们可以在dplyr
包中得到的一样:
r - 使用 tidyeval 进行程序化回归建模
我正在尝试使用 tidyeval 进行编程。
我想编写一个函数来为选定的结果变量运行逻辑回归模型:
但是得到:
!enquo_outcome 中的错误:无效的参数类型
(注意真实场景涉及更复杂的功能)。
这可能吗?
r - 在 SAS Enterprise Guide 上启用 RLANG
我想在我的 SAS EG 7.1 上使用 R 当我运行以下代码检查 R 是否启用时,我发现它不是
日志 :
SAS (r) 专有软件版本 9.4 TS1M3
NORLANG 禁止 SAS 执行 R 语言语句。
我想知道如何在我的 SAS 上启用 RLANG,以便我可以使用PROC IML等。
r - 在函数 F 中,使用 F 的参数作为 update() 的参数
我想要一个函数my_lm
,如下所示:
但是我遇到了以下错误:
我怀疑我在滥用rlang
,但我似乎无法弄清楚引用、取消引用和公式化的组合可以解决这个问题。
编辑:所需的输出就像我跑了:
数据=虹膜)
EDIT2:我还应该澄清一下,我真的对rlang
用于解决此问题的解决方案感兴趣,update
而不是使用paste
,gsub
和formula
.
r - 在 mutate_at 的 vars 参数中使用 quosures
我想编写一个简单的函数,该函数将利用调用中通过省略号传递的 quosures mutate_at
。
问题
代码产生:
期望的结果
结果应该等同于:
假设:
该
mutate_some
函数必须采用 ellipsis 参数,该参数在mut_vars <- quos(...)
.特别是,我正在寻找一种类似于
rlang::do_something_(mut_vars)
. 此功能是较长管道的一部分,我需要保留mut_vars
,quos()
因为我稍后会使用它。我不想更改列名(如上面所需的结果)。
r - dplyr::filter 中的引用透明度:使列名可变
核心问题(它似乎归结为)
如何rlang::quo
使用“左”而不是“右”侧引用透明的表达式构造调用
取自的帮助页面rlang::quo
,这有效
虽然这不是:
问题放在更多的背景下
dplyr::mutate
允许“表达式的两边”在两个表达式部分都可以引用透明的意义上是可变的(参见小插图):
我怎样才能在dplyr::filter
能够使列名(“左侧”)引用透明/灵活的焦点中实现相同/相似的东西。
我想理想地结束这样的事情(伪代码):
我试过的
我知道这dplyr::filter
与dplyr::mutate
他们期望的表达式类型不同。所以基于小插图我想出了这个版本,其中要评估的整个表达式作为参数传递:
但是,当我想使用参考时,这“迫使”我真正使用实际的列名c_id
:
我基本上不知道如何构造调用,dplyr::quo
或者dplyr::enquo
左侧部分包含列名的评估引用,而右侧部分包含要评估的逻辑查询的**未评估*引用:
换句话说,我认为 quosure 最终应该是~id == right
,我不知道该怎么做
r - 如何在自定义函数中使用 rlang::UQS 中的变量?
我仍在尝试理解 R 中的 quosures,但我不明白为什么下面函数中的替换会失败。
似乎调用my.toggle(rlang::UQS(fn.args))
应该等效于my.toggle(toggle = T)
(实际上,这就是将函数调用包装在 中时得到的quo
),但是该函数无法正确执行。我究竟做错了什么?
r - 通过 rlang quosures 和 dplyr 传递多个参数列表
目标:编写一个函数,它将一个数据帧作为其第一个参数,然后将两个附加参数(参数列表)传递给
dplyr::select
该函数,以便该函数将返回两个数据帧。
这是一个工作示例
我更喜欢参数df1
并df2
采取 a list
not a alist
。但是,my_select
如果参数为list
如果可能的话,我不想要求最终用户使用alist
,因为我没有一个很好的方法来测试alist
用于传递参数而不是list
.
我尝试了几种rlang::UQ
, rlang::UQE
,rlang::UQS
和rlang::quo
,rlang::enquos
和的组合rlang::quos
来解决这个问题。我认为最好的方法是:
有没有办法将rlang
包与dplyr一起使用,以便 的语法将返回与通过传递参数时my_select2
相同的对象?my_select
alist