问题标签 [quosure]

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 投票
2 回答
299 浏览

r - Shiny Screening App - 用户过滤/变异/修改

我正在创建一个闪亮的筛选应用程序,它允许用户在预定的数据帧上键入 R 命令,例如filter和。mutate

就个人而言,我认为最用户友好的方法是使用包含筛选参数的空白数据框列,用户可以在其中输入命令,例如filter(mpg >= 21)mutate(cyl_sq = cyl^2)使用mtcars数据集作为示例。

显示预期功能的简单应用程序:

我愿意使用DTrhandsontable或任何人能想到的替代方案。不幸的是,您似乎无法在 中获取已编辑的表值DT,但希望它为我所追求的提供了一个很好的示例。

我已经尝试了我能想到的所有 quosures 和映射函数的组合,但都无济于事。

有人有想法么?

0 投票
4 回答
606 浏览

r - 在不同变量上运行 lm 的函数

我想创建一个函数,它可以在给定数据集中的不同变量上运行回归模型(例如使用 lm)。在这个函数中,我将指定我正在使用的数据集、因变量 y 和自变量 x 作为参数。我希望这是一个函数而不是循环,因为我想在脚本的各个位置调用代码。我的天真函数看起来像这样:

该函数显然不起作用,因为 lm 函数无法将 y 和 x 识别为数据集的变量。

我做了一些研究,偶然发现了以下有用的小插曲:用 dplyr 编程。小插图为我面临的类似问题提供了以下解决方案:

我知道 lm 不是 dplyr 包的一部分,但想提出一个类似的解决方案。我尝试了以下方法:

运行此代码会给出以下错误消息:

is_quosure(e2) 中的错误:缺少参数“e2”,没有默认值

任何人都知道如何修改代码以使其工作?

谢谢,

约斯特。

0 投票
2 回答
207 浏览

r - 具有从输入数据生成的美学效果的 ggplot

由于我需要在 R 中制作很多不同的图,我试图在准备数据时加入更多逻辑(添加与美学相对应的列名),而在图本身中加入更少的逻辑。

考虑以下默认虹膜图:

现在,我制作了一个修改后的 iris 数据,其列名与所需的美学相匹配:

我想以这样一种方式在一个函数中绘制,它基本上构建以下命令只是稍微动态一些,所以你使用数据中提供的所有美学。

很久没有阅读有关非标准评估、表达式和引用的任何内容了,我注意到rlang和 quosures ( cheatsheet ) 有相当多的发展。[这个] 问题有点帮助,但它并没有解决我想从数据中推断美学的事实。

最后我尝试了很多东西,并查看了aes。在那里我看到:

我认为这就是我所做的所有尝试都喜欢的原因:

没有成功,因为 aes 试图“确定”我的 quosure(s)。

问题有没有办法根据数据的内容以动态的方式向 aes 提供参数(所以你事先不知道你需要哪种美学?

如果我的问题不够清楚,最后我做了一些有用的东西,只是我觉得这完全没有必要,因为我不知道/理解正确的方法。所以下面的东西有效并且是我的想法,但我不喜欢的是我必须修改 aes:

下面的块是独立的,可以在没有上面的代码块的情况下执行。

0 投票
2 回答
1045 浏览

r - 如何将使用 enquo() 创建的动态变量名称传递给 dplyr 的 mutate 进行评估?

我正在创建一个工作流,其中包含相同的管道步骤,包括重命名、选择、然后使用我在管道之前提供的名称进行变异。

我已经成功使用enquo()and !!(bang bang) 重命名为我想要的字符串,然后再次选择它,但是当我到达 mutate 步骤时,它要么将文本字符串重复为列值,要么不会评估。

我重新创建了以下代码:

quo_name()我可以用和重命名列:=

我可以选择它使用!!

但是我不能在 mutate 中调用该列并使用这些值

0 投票
3 回答
451 浏览

r - R:new_quosures(NextMethod())中的错误:找不到函数“new_quosures”

考虑一个数据框:

我正在尝试 group_by 并进行总结,但是我不断收到错误消息

我正在使用的代码如下:

请注意,这是虚拟数据,错误会在带有虚拟数据的 Windows 操作系统中重现。此外,我正在使用 Windows 操作系统。此外,我尝试了以下方法:

  1. 删除 plyr
  2. 检查和编辑 NA/无限值
  3. 将数据框转为数据表并运行代码

您能否帮助我了解错误的根本原因或我可以使用的替代方法?

0 投票
1 回答
417 浏览

r - `as.name` 和 `sym` 有什么区别?

我试图围绕标准、非标准评估、quosures 等。在许多示例中,我看到传递的字符串变量被转换为带有或带有包的dplyr可用形式。as.namesymrlang

它们在管道中可以互换吗?哪种情况会失败?

0 投票
1 回答
82 浏览

r - 非标准评估设置名称 R

我试图重复调用一个函数(特别是 Seurat::DimPlot),其中一个参数是一个命名列表(cells.highlight)。我打算用purrr::imap做打电话。我有一个命名列表,其中列表的每个元素都是一个字符向量。我想为 Seurat::DimPlot 的 cells.highlight 参数创建列表。当我尝试

该图看起来不错,但不是将变量 .y 替换为列表元素名称,而是将列表元素名称保留为“.y”。(所以在图例中我看到“.y”)。制作 SSCE

我希望它在哪里

我尝试过使用 enquo、as_name、使用 ':='、ensym、quote,但我似乎无法做到正确。我知道你可以用 list[[name]]=... 之类的东西把它分成两行,但因为这是一个更大问题的一部分,我很想学习如何适当地引用和取消引用变量名。

我一直在使用 NSE 时遇到问题,即使在阅读、重新阅读和重新阅读 Hadley Wickhams 的 Advanced-R关于准引用的章节和他的关于评估的章节之后,但似乎所有的部分都在那里,我只是可以不把它们放在一起

0 投票
0 回答
144 浏览

r - R: quosures 的测试和子集元素

我正在尝试编写一个函数来将一些 quosure 参数传递给内部dplyr::select。但是,我希望能够在提供参数后对它们应用一些条件。在这种特殊情况下,因为选择不存在的列会产生错误,所以我希望函数检查调用者提供的列是否存在于通过参数传递的数据帧tib中,并在我通过 quosure 和取消引用之前删除任何不存在的列运算符到select.

问题是,一旦某个东西在一个 quosure 中,我就不再知道如何操作它了。symsselect可以将名称转换为字符串,消除多余的名称,然后将字符串向量转换回符号 with ,但这基本上剥夺了使用 quosure 的所有好处,然后人为地再次提供它们,这似乎是迂回和不雅的。我想避免在这种精确情况下工作的笨拙的解决方案,但不会为下次提供任何有用的原则。

E由于在remove_cols参数中,下一行将不起作用。您不应将E其视为四五个中的一个,而应视为数百个参数中的 10 或 20 个。

期望的输出:

0 投票
1 回答
274 浏览

r - 调用 tidyverse 函数时如何使用引号和取消引号?

我不明白如何在 R tidyverse 的上下文中使用表达式和引用/取消引用/准引用。在下面的示例中,我认为使用 unquote ( !!) 运算符可以让我在计算表达式后为 add_row 生成所需的参数ex。但是,我得到了这个错误。我已阅读 Advanced R 中的Metaprogramming Big PictureQuasiquotation章节,但我仍然无法理解如何正确使用这些功能。

reprex 包(v0.3.0)于 2019 年 5 月 17 日创建

0 投票
2 回答
867 浏览

r - 在 quasiquotation 上下文之外取消引用 quosure

我正在定义一个函数来获取回归模型的预测值,其中包含不同亚组(亚群)的调查数据。我使用调查包中的 svyglm 函数。

我的问题涉及处理 svyglm 函数中的子集选项。由于它使用非标准评估,我理解这意味着它不会将列名作为字符串。我尝试只使用不带字符串的列名并引用(enquo)并取消引用它(!!)。但是,这两个选项都不起作用。我也玩过 ensym() 和 expr() 但没有得到任何结果。

资料库

有礼貌

功能和输入

输出/错误

没有定论

功能和输入

输出

您知道如何使该功能正常工作吗?