问题标签 [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.
r - 在自己的函数中将符号列表转换为字符串
我有以下数据框:
我现在正在编写一个my_function
采用以下形式的函数:
如果我没记错的话,我将 group_vars 作为符号传递给我的函数,对吗?
但是,在我的函数中,我想首先进行一些错误检查,如果传递给函数的变量存在于数据中。对于时间变量,我成功了,但我不知道如何将 group_vars 列表转换为字符串向量,使其看起来像c("group1", "group2")
.
我当前的功能如下:
我想扩展后一部分,以便我也可以以!group_vars %in% colnames(data)
. 我知道我可以将 group_var 变量作为字符串向量传递给函数,但出于其他原因我不想这样做。
r - r rlang:在 tidyselect 助手上使用 is_quosure
假设您在 R 函数中有一个参数,它可以是:
- 一个原始的 tidyselect 助手,例如
contains("a")
,starts_with("a")
等等, - 带有助手的 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 日创建
r - dplyr group_by 通过非标准评估的多个函数参数
我正在阅读dplyr 的小插图,试图弄清楚如何dplyr
在我的函数代码中使用。中途讨论了如何使用enquos
on...
将多个参数传递给 group_by。
一个简短的例子来说明它是如何工作的
我不知道是否有一种方法可以分配多个表达式值而无需保留...
而无需进行一些有问题的编码。
要了解调用的外观,请使用以下示例:
这适用于我试图做的事情,但我想知道是否有更好的方法来接受这些论点并处理它们。我所做的每一次尝试都将原始grp
调用变成类似于enquos(...)
失败的东西,所以我做了一个解析并将它们变成一个字符向量,老实说我应该只是期望用户传递字符?
我选择不使用字符向量作为预期输入,因为考虑到函数的 sum.col 和 filter 参数需要 NSE 表达式,我试图保持一致。也许 rlang 包中的某些东西会将原始表达式的每个元素转换为 quosures 列表?
编辑:修复了可重现的示例并提供了预期的输出
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()
,但无济于事。
如果您需要更多详细信息来回答我的问题,请告诉我。
r - dplyr 将变量传递给函数以动态排列 cols
我试图通过传递一个变量列表以首先按升序使用,一个变量按降序(最后按排列顺序)来动态排列数据帧。每次迭代都选择顶行并存储另一个数据框。下面的示例仅在传递单个降序变量时有效,但我无法使其与变量列表一起使用。
r - 模仿 R 函数中的辅助 tidy dots 参数
我正在寻找一个函数,该函数接受(数据框)变量列表作为其参数之一。我已经设法让它部分工作,但是当我到达 group_by/count 时,事情就崩溃了。我怎样才能做到这一点??
我想做类似的事情
这些调用f1()
都可以正常工作,但对于f2
任何命令都不起作用。他们都以Error in !split : invalid argument type
. 没有论点,这f2(drat:qsec)
不会(立即)起作用split
,我对此并不感到惊讶,但是如何使第二条和第三条评论起作用?
r - dplyr 中 mutate_if 的函数参数适用于软贬值的 funs() 但不适用于 list()
我正在尝试更新我的以下代码,因为funs( MY_FUN )
已软贬值。我知道应该替换它list( ~MY_FUN )
,但这似乎不适用于我的代码。
这是我的数据框:
以下代码行有效并且完全符合我的要求:
导致
但是使用未折旧参数将所有 NA 值提供给谓词中评估为 TRUE 的行
这导致
有人可以向我解释一下吗?我知道问题的发生是因为quo_name(quo(.))
但我不知道如何解决它。谢谢!
r - 在编写 R 包时,使用 flowCore::transform 函数,我可以同时使用变量名作为文本并获取实际值吗?
我正在尝试将一个参数传递给一个函数,该函数是一个字符串,但必须同时评估它的名称(符号?)和它的值(参见下面的示例)。到目前为止,我可以用来base::get
获取实际值,但分配flowCore::'transform,flowSet-method'
失败。我知道关于 SO 的许多问题都是关于将字符串评估为变量名,正如您将在下面看到的那样,我尝试了很多。我认为必须有一个rlang
基于的答案,但我找不到任何解决方案,任何指针将不胜感激。
一个可重现的例子:
虽然在上面的代码中,transform forz
可以正常运行,但实际上向 flowSet 添加了一个名为“timeCh”的新列。这不是想要的效果,因为我想使用转换来专门更改现有的 column Time
。因此,我一直在尝试一些策略来评估存储在 timeCh 中的字符串作为对象名称 (?) into transform
,但无济于事:
在我看来,范围界定是一个问题,但我真的很难解决如何解决它。
r - 如何测试函数参数是否是“quosurable”名称?
我正在制作一个应该能够为其第一个参数处理多个类的函数:公式、字符、tidy-selection、var 名称......然后目标是使用 tidyselection tidyselect::vars_select
,除了裸公式。
问题是当我测试这个参数的类时,如果该值是一个要整齐选择的名称,它会抛出一个错误,因为它会被认为是一个未找到的对象。
我找到了一个解决方法tryCatch
,如果它的评估失败(因此如果它不存在于这个范围内),它会引用第一个参数。
这对我来说似乎并不干净,因为我在没有过滤我的具体案例的情况下捕获了所有错误。
是否有一个内置函数来测试这个,或者比这个解决方法更干净的解决方案?
r - 获取字符向量的所有组合
我正在尝试编写一个函数来动态地 group_by 字符向量的每个组合。
这就是我设置列表的方式:
然后我把它扔进一个循环。
所以本质上我想复制这个
...以及其余的组合。然后我想将所有摘要放入一个列表(小标题/列表列表)
它完全失败了。这是我的错误信息:
Error: Column `type, country` is unknown
。
不仅如此,b
还没有给我想要的东西。这是一个长度为 12 的列表,而我在失败之前只期望 2 。一个按“类型”分组,第二个按“国家”分组。
总的来说,我是 R 新手,但我认为 tidy eval 真的很酷,我想尝试一下。这里有什么提示吗?