问题标签 [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 回答
508 浏览

r - 在自己的函数中将符号列表转换为字符串

我有以下数据框:

我现在正在编写一个my_function采用以下形式的函数:

如果我没记错的话,我将 group_vars 作为符号传递给我的函数,对吗?

但是,在我的函数中,我想首先进行一些错误检查,如果传递给函数的变量存在于数据中。对于时间变量,我成功了,但我不知道如何将 group_vars 列表转换为字符串向量,使其看起来像c("group1", "group2").

我当前的功能如下:

我想扩展后一部分,以便我也可以以!group_vars %in% colnames(data). 我知道我可以将 group_var 变量作为字符串向量传递给函数,但出于其他原因我不想这样做。

0 投票
1 回答
120 浏览

r - r rlang:在 tidyselect 助手上使用 is_quosure

假设您在 R 函数中有一个参数,它可以是:

  1. 一个原始的 tidyselect 助手,例如contains("a")starts_with("a")等等,
  2. 带有助手的 quosures 列表,带有vars(contains("a")).

如果您在情况(1)或(2)中,您如何检查功能?

问题是它is_quosures(vars(contains("a")))有效,但is_quosures(contains("a"))不起作用,因为它首先尝试评估函数contains("a"),当单独评估时返回错误!?

reprex 包(v0.3.0)于 2019 年 12 月 3 日创建

用例

您想使用诸如 , 之类的函数summarise_at(data, var),并希望使其对指定var为直接tidyselect助手或包装在vars()调用中的用户具有鲁棒性。我想出解决这个问题的唯一方法是逐案进行 if/then 检查它是否是 quosure (如果不是,则包装到 vars 中),但这在上述情况下将完全失败。

reprex 包(v0.3.0)于 2019 年 12 月 3 日创建

0 投票
1 回答
237 浏览

r - dplyr group_by 通过非标准评估的多个函数参数

我正在阅读dplyr 的小插图,试图弄清楚如何dplyr在我的函数代码中使用。中途讨论了如何使用enquoson...将多个参数传递给 group_by。

一个简短的例子来说明它是如何工作的

我不知道是否有一种方法可以分配多个表达式值而无需保留...而无需进行一些有问题的编码。

要了解调用的外观,请使用以下示例:

这适用于我试图做的事情,但我想知道是否有更好的方法来接受这些论点并处理它们。我所做的每一次尝试都将原始grp调用变成类似于enquos(...)失败的东西,所以我做了一个解析并将它们变成一个字符向量,老实说我应该只是期望用户传递字符?

我选择不使用字符向量作为预期输入,因为考虑到函数的 sum.col 和 filter 参数需要 NSE 表达式,我试图保持一致。也许 rlang 包中的某些东西会将原始表达式的每个元素转换为 quosures 列表?

编辑:修复了可重现的示例并提供了预期的输出

0 投票
0 回答
157 浏览

r - 如何在 R 循环中动态更新传递给 fable 包中 ARIMA 函数的变量名称,?

我试图在一个循环中估计一系列 ARIMA 模型,每次迭代都从一个因变量列表中传入一个不同的因变量。我正在尝试使用该fable包在 R 中执行此操作。但我似乎无法将列表中的不同变量名传递到 dplyr 管道中。

我有一个看起来像这样的 tsibble:

此数据是使用以下代码生成的:

我正在尝试编写一个函数,该函数将函数规范列表作为其输入,并循环遍历函数以重复估计模型,如下所示:

包含规范细节的mdl_list, 看起来像这样:

尝试运行代码时出现以下错误:

这似乎与ARIMA(!!mdl_vars_ari_enquo)解析变量名参数的方式有关。传入var_log工作正常。但是传入mdl_vars_ari不起作用,我认为是因为 dplyr 的非标准评估。

我在这里阅读了 Hadley Wickham 的指南:https ://dplyr.tidyverse.org/articles/programming.html 但两者都没有quo()enquo()似乎也没有奏效。我也尝试过as.name(),但无济于事。

如果您需要更多详细信息来回答我的问题,请告诉我。

0 投票
0 回答
53 浏览

r - dplyr 将变量传递给函数以动态排列 cols

我试图通过传递一个变量列表以首先按升序使用,一个变量按降序(最后按排列顺序)来动态排列数据帧。每次迭代都选择顶行并存储另一个数据框。下面的示例仅在传递单个降序变量时有效,但我无法使其与变量列表一起使用。

0 投票
1 回答
76 浏览

r - 模仿 R 函数中的辅助 tidy dots 参数

我正在寻找一个函数,该函数接受(数据框)变量列表作为其参数之一。我已经设法让它部分工作,但是当我到达 group_by/count 时,事情就崩溃了。我怎样才能做到这一点??

我想做类似的事情

这些调用f1()都可以正常工作,但对于f2任何命令都不起作用。他们都以Error in !split : invalid argument type. 没有论点,这f2(drat:qsec)不会(立即)起作用split,我对此并不感到惊讶,但是如何使第二条和第三条评论起作用?

0 投票
1 回答
49 浏览

r - dplyr 中 mutate_if 的函数参数适用于软贬值的 funs() 但不适用于 list()

我正在尝试更新我的以下代码,因为funs( MY_FUN )已软贬值。我知道应该替换它list( ~MY_FUN ),但这似乎不适用于我的代码。

这是我的数据框:

以下代码行有效并且完全符合我的要求:

导致

但是使用未折旧参数将所有 NA 值提供给谓词中评估为 TRUE 的行

这导致

有人可以向我解释一下吗?我知道问题的发生是因为quo_name(quo(.))但我不知道如何解决它。谢谢!

0 投票
2 回答
151 浏览

r - 在编写 R 包时,使用 flowCore::transform 函数,我可以同时使用变量名作为文本并获取实际值吗?

我正在尝试将一个参数传递给一个函数,该函数是一个字符串,但必须同时评估它的名称(符号?)和它的值(参见下面的示例)。到目前为止,我可以用来base::get获取实际值,但分配flowCore::'transform,flowSet-method'失败。我知道关于 SO 的许多问题都是关于将字符串评估为变量名,正如您将在下面看到的那样,我尝试了很多。我认为必须有一个rlang基于的答案,但我找不到任何解决方案,任何指针将不胜感激。

一个可重现的例子:

虽然在上面的代码中,transform forz可以正常运行,但实际上向 flowSet 添加了一个名为“timeCh”的新列。这不是想要的效果,因为我想使用转换来专门更改现有的 column Time。因此,我一直在尝试一些策略来评估存储在 timeCh 中的字符串作为对象名称 (?) into transform,但无济于事:

在我看来,范围界定是一个问题,但我真的很难解决如何解决它。

0 投票
2 回答
108 浏览

r - 如何测试函数参数是否是“quosurable”名称?

我正在制作一个应该能够为其第一个参数处理多个类的函数:公式、字符、tidy-selection、var 名称......然后目标是使用 tidyselection tidyselect::vars_select,除了裸公式。

问题是当我测试这个参数的类时,如果该值是一个要整齐选择的名称,它会抛出一个错误,因为它会被认为是一个未找到的对象。

我找到了一个解决方法tryCatch,如果它的评估失败(因此如果它不存在于这个范围内),它会引用第一个参数。

这对我来说似乎并不干净,因为我在没有过滤我的具体案例的情况下捕获了所有错误。

是否有一个内置函数来测试这个,或者比这个解决方法更干净的解决方案?

0 投票
2 回答
90 浏览

r - 获取字符向量的所有组合

我正在尝试编写一个函数来动态地 group_by 字符向量的每个组合。

这就是我设置列表的方式:

然后我把它扔进一个循环。

所以本质上我想复制这个

...以及其余的组合。然后我想将所有摘要放入一个列表(小标题/列表列表)

它完全失败了。这是我的错误信息: Error: Column `type, country` is unknown

不仅如此,b还没有给我想要的东西。这是一个长度为 12 的列表,而我在失败之前只期望 2 。一个按“类型”分组,第二个按“国家”分组。

总的来说,我是 R 新手,但我认为 tidy eval 真的很酷,我想尝试一下。这里有什么提示吗?