问题标签 [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.

0 投票
3 回答
1332 浏览

r - 如何将未引用的列名列表提供给`lapply`(以便我可以将它与`dplyr`函数一起使用)

我正在尝试编写一个tidyverse/dplyr我想最终与lapply(或map)一起使用的函数。(我一直在努力回答这个问题,但遇到了一个有趣的结果/死胡同。请不要将此标记为重复 - 这个问题是您在那里看到的答案的扩展/背离。)

是否有
1) 一种方法来获取带引号的变量列表以在 dplyr 函数中工作
(而不使用已弃用的SE_函数) ,或者是否有
2) 某种方法通过lapplyor提供未引用的字符串列表map

我已经使用Programming in Dplyr小插图构建了我认为最符合当前使用 NSE 标准的功能。

样本数据:

报表生成功能

这适用于生成单个报告:

当我尝试设置要生成的所有 4 个报告的列表时,一切都崩溃了。(诚​​然,函数最后一行所需的代码——返回一个字符串,然后用它填充列——应该足够线索,我已经走错了方向。)

结果是:

我还尝试将字符串列表转换为名称,然后再将其交给applyand map

在任何情况下,我问这个问题的原因是我认为我已经按照当前记录的标准编写了该功能,但最终我看不出有办法利用这个功能apply的家庭成员甚至家庭成员purrr::map. names没有像userR在这里所做的那样重写要使用的函数https://stackoverflow.com/a/47316151/5088194有没有办法让这个函数使用applymap

我希望看到这个结果:

0 投票
2 回答
687 浏览

r - 使用 dplyr 进行函数式编程

通过在使用 dplyr 的函数中使用非标准评估,寻找一种更有效/更优雅的方式将多个参数传递给组。我不想使用 ... 运算符,而是单独指定函数。

我的具体用例是一个函数,它接受一个数据框并创建一个语法更简单的 ggplot 对象。这是我想用我的函数自动化的代码示例:

我想将 group_by、summarize、ggplot 和 geom_line 组合成一个简单的函数,我可以提供 x、y 和组,并让它在后台执行所有肮脏的工作。这是我的工作:

我觉得 group_by 处理非常不优雅:引用xgroupwith enquo,然后!!在另一个引用函数内部取消引用它们quos,只是在下一行重新取消引用它们!!!,但这是我唯一能够开始工作的事情. 有一个更好的方法吗?

另外,有没有办法让 ggplot!!代替substitute?我在做的事情感觉不一致。

0 投票
1 回答
99 浏览

r - 使用 dplyr + NSE 的列无效

以下代码在我的 Mac 上运行良好,使用 CRAN R:

但是当我在 Windows、Microsoft R Open 3.4.2、dplyr 0.7.3 上运行它时,我得到:

spread注意:用.替换很容易修复spread_('Session', name_data_var)。有趣的是,select调用工作正常(我的真实数据框有很多列)。我担心 dplyr 的 NSE 无法在给定环境中工作的更大问题。

看着调试器堆栈跟踪已经足够令人生畏了,我决定先在这里寻求帮助。任何关于正在发生的事情的想法或关于如何调试它的想法都非常感谢!

0 投票
4 回答
1180 浏览

r - 自定义管道以消除警告

这个问题有关

我想构建一个自定义管道%W>%,可以使一个操作的警告静音

将相当于:

这两个尝试不起作用:

我怎样才能把rlang它变成有效的东西?

0 投票
3 回答
576 浏览

r - 在 dplyr 0.7.x 中使用否定和选择

我正在尝试编写一个函数,该函数需要从结果数据框中排除用户传递的变量。我也借此机会进一步了解了新的 dplyr 语法。

该函数的作用类似于数据帧的交叉连接。我想用它作为跨函数参数复制数据的干净方式。

该功能的工作原理如下:

我想看看是否可以用管道选择语句替换最后一个语句。但是,否定似乎不起作用。

我能够得到类似的东西:

工作,但这显然只选择.k. 我无法得到类似的东西:

去工作。

0 投票
2 回答
563 浏览

r - 从字符串解析和评估quosures

有没有办法从字符串中解析和评估 quosure。我想实现与以下示例相同的输出:

但从

我试过的票价是:

0 投票
1 回答
176 浏览

r - 如何在 dplyr 中组合不同的输入变量和不同的函数汇总

我需要根据要汇总的变量使用不同的汇总函数对数据框进行分组和汇总。这些函数可以有不同的主要和可选参数,我想编写一个可以完成所有这些的函数。

这是我设法编写的更简单的函数,只是为了展示它的逻辑。

这对我来说没问题,我可以do_summary_x在我想要总结的变量上使用某种循环来完成工作。但我想将循环集成到更高级别的函数中,利用...while 仍然能够为我的汇总函数使用不同的参数。

我知道我不能...用于不同的子级函数,所以我将前一个(我的变量或函数参数)之一作为列表传递,并使用do.call. 对我来说,保留...输入变量和添加参数更自然,总是用列表命名。这就是我来的:

这工作正常,所以我对它总体上很满意,但这仅适用于具有x第一个参数的函数。

假设我还希望能够更改 的第一个参数的名称fun,即x此处。我该怎么办 ?

我还没有找到一个解决方案来引用然后注入类似的do.call东西changing_arg = !!x,或者合理使用list(!!changing_arg := !!x)

0 投票
2 回答
3729 浏览

r - dplyr 重命名 - 错误:`new_name` = old_name 必须是符号或字符串,而不是公式

我正在尝试重命名一个列,dplyr::rename()并且 R 正在返回这个我无法在网上任何地方找到的错误。

Error: `new_name` = old_name must be a symbol or a string, not formula

具有 2 列数据框的可重现示例:

会话信息:

我希望这个新的简单数据框将第一列重命名为new_name. 这也不适用于rename_().

当前的 R 版本是 3.4.3,dplyr 版本是 0.7.4。我无法在 R 版本 3.3.3 上复制它,但能够在 R 版本 3.4.0 上复制它。这是在完全干净的 R 会话上测试的。

我目前的解决方案是重写我的部分代码,plyr::rename因为它仍然有效,但这并不理想,因为它需要我重写很多代码。
工作示例plyr()

0 投票
1 回答
104 浏览

r - rlang:quo、文档、发现的赋值形式。或者其他的东西

quo 的许多帮助页面示例都采用这样的形式,将 quo 的输出分配给 quo:

很明显,这些分配不会像通常那样覆盖 quo 函数(因为他连续两次这样做)。一流的物品,等等。

所以我对发生的事情的最好猜测是,这不是一个正常的赋值,而是 quo, quo<- 的赋值形式。但我无法获得任何有关这方面的信息。

非生产性:

getAnywhere(quo<-)
getAnywhere(`quo<-`)
getAnywhere(`quo <-`)
rlang:::quo<-
rlang:::`quo<-`
rlang:::`quo <-`

所以我希望有人能告诉我作业表格的用途和工作原理,如果我看到的不是作业表格,而是相当gnomic“[q]uo自我的某些方面,那就更是如此- 在自己的环境中进行评估。”

最后,如果在某处有此功能或用法的可访问文档,我想知道我是如何找到它的,如果没有,我可能应该告诉 Hadley。他是如何保持这么多盘子旋转而不掉下比他更多的球对我来说完全是个谜。

0 投票
1 回答
169 浏览

r - dplyr,rlang:无法预测将名称传递给嵌套 dplyr 函数的次要变体是否会起作用

再现性数据

该函数应该将其数据和其他参数作为不带引号的名称,在数据中找到这些名称,并使用它们添加一列并过滤掉第一行。这没用。变异说找不到了。

这个函数,我是通过拼写错误找到的——注意 mutate 语句中的 .i 而不是 .j ——完成了前一个函数应该做的事情。我不知道为什么。我认为它正在跳过函数参数并在全局环境中查找 .i 。或者也许它正在使用一个ouiji板。

由于 mutate 在以通常的 R 方式传递给它时找不到 .j,因此可能需要以 rlang 样式的 quosure 传递,就像形式 X 和 Y 一样。这个函数也不起作用,UQ in mutate 说它找不到了。与上面的第一个函数一样,如果将 mutate 中的 .j 替换为 .i,它就会起作用。(似乎应该有一个平行现状的“enquos”)。

最后,似乎一旦在 mutate 中进行了 .i 替换,t4() 就不再需要数据参数了。见下文,我将其替换为 bop_foo_foo。但是,如果您将 bop_foo_foo 全部替换为数据名称 .i, (t5()),则 UQ 再次无法找到 a。

在我看来,上面的函数似乎是单个函数的相对较小的变体。我又跑了几十次,虽然我观察到了一些模式,并且阅读了不知道多少遍的 enquo 和 UQ 帮助文件,但我仍然无法真正理解。

我想知道为什么上面那些不起作用的功能不起作用,以及为什么起作用的功能起作用。我不一定需要一个功能一个功能的批评。如果您能陈述体现所需理解的一般原则,那将是令人愉快的。而且绰绰有余。