问题标签 [quasiquotes]

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 投票
1 回答
857 浏览

r - 仅在提供参数时具有可选分组的 dplyr 函数

我需要编写一个创建自定义区域图的 dplyr 函数。所以这是我的尝试。

但我一直想知道是否有任何by参数的默认值可以输出geom_area所有组的情节。我知道我可以if用来定义ggplot2首先使用的数据并在函数中执行类似的操作:

但是我思考是否有一个巧妙的技巧来提供一些值(例如常量)group_by,尽管被调用,但仍然可以summarise保留原始结构(所以基本上,什么都不做)。一种类似于您在ggplot2.

请参阅所附数据样本。group是一个可选的分组变量。

0 投票
1 回答
173 浏览

r - 将变量传递给使用 `enquo()` 的函数

我有一个概念问题。enquo我想将变量传递给一个函数,该函数通过(来自dplyr/rlang包)将其中一些变量转换为 quosures 。但是,我想通过其他功能这样做。

考虑以下内容,它有一个较低级别的函数(使用 的函数enquo())和一个提供给它的较高级别的函数。当它将其变量传递qlower_function(例如,用户调用higher_func1(mtcars, cyl==6))时, 的值new_q将是表达式'q'。

如何保留更高级别功能的用户输入,以便它们可以被接受enquo() 我知道有一些我会改变的解决方法lower_function,但我对这些不感兴趣。我对使用enquo().

0 投票
1 回答
154 浏览

r - 在 purrr:map 调用中对函数使用 quasiquoted 参数

我在弄清楚准引用时遇到了一些麻烦,特别是我有一个函数,它接受一个参数,该参数指定哪个变量应该进入模型,然后在 purrr::map 调用中运行。

我一直在工作:https ://dplyr.tidyverse.org/articles/programming.html


将名称直接放入按预期工作:

我可以!! var在函数中使用:

我假设这与!! var引用嵌套 tibble 中的值的事实有关data,我一直在四处寻找,rlang::qq_show()但到目前为止还没有弄明白

0 投票
1 回答
76 浏览

r - 将多个调用参数传递给 dplyr 自定义函数中的形式参数,而不使用“...”

为了使自定义函数能够灵活地接收每个形式参数的一个或多个调用参数,我目前依赖“...”:

但是“...”模糊了函数的逻辑,并且它不能用于具有 2 个或多个需要多个调用参数的正式参数的自定义函数。

有没有办法编写上述函数来利用形式参数(例如,“组”)而不是“...”,它可以接收单个向量名称或向量名称的向量作为其参数?就像是:

请注意,此代码可以工作,但需要用户记住在函数体中使用 quos():

我很想在函数体中依赖 enquos() 。

0 投票
1 回答
93 浏览

r - rxDataStep 使用准引号“转换”参数

我正在尝试使用准引用语法(quo, exprs,!!等)以及该foreach函数通过要在函数内部评估的表达式的命名列表(rxDataStep特别是transforms参数)来创建几个新变量。我收到以下错误:

我有一个数据集,其中包含许多变量,我需要对数转换才能执行进一步分析。我已经使用rx“RevoScaleR”包中的功能大约三年了,完全错过了数据转换技术的“tidyverse”/管道方法。我偶尔会涉足这些工具,但更喜欢坚持使用上述rx功能,因为我相对熟悉,而且到目前为止它们对我很有帮助。


作为 MWE:

所需库:

创建需要对数转换的变量。

带有标识符和以上变量的数据框。

创建对数转换变量表达式的对象;这将创建一个命名列表。

现在尝试将变量添加到现有数据框中。

产生的错误如下:

我根本无法理解log_vars定义为命名列表的错误。可以使用str和进行检查typeof

我尝试了一种稍微不同的方式来定义新变量:

unlist鉴于已经exprs提供了一个列表作为输出,我必须使用它。无论哪种方式,我都会遇到与以前相同的错误。

自然,我希望result.1_log, result.2_log在数据框中插入 10 个名为 等的新变量。相反,我收到上述错误并且未创建新的数据框。


我怀疑这些rx函数不喜欢使用准引号语法,但是,我以前在必须识别具有某些变量的 NA 值的主题时使用过它。这是使用 的rowSelection参数完成的rxDataStep。我确实意识到这rowSelection需要一个单一的逻辑表达式,而transforms需要一个命名的表达式列表。

任何帮助将不胜感激,因为这种类型的数据转换将在我的分析中再次跟上。我确实怀疑我根本不了解准引号语法的内部工作原理,或者列表的一般工作方式,但希望有一个简单的解决方法。

我正在使用 Microsoft R Open 3.4.3。


我的会话信息如下:

R Services Information: Local R: C:\Program Files\Microsoft\ML Server\R_SERVER\ Version: 1.3.40517.1016 Operating System: Microsoft Windows 10.0.17134 CPU Count: 4 Physical Memory: 12169 MB, 6810 MB free Virtual Memory: 14025 MB, 7984 MB free Video controller[1]: Intel(R) HD Graphics 620 GPU[1]: Intel(R) HD Graphics Family Video memory[1]: 1024 MB Connected users: 1

0 投票
1 回答
250 浏览

haskell - 如何在 Haskell 中编写模式准引用器?

我使用准引用器在编译时创建我的智能构造数据类型。这看起来像:

(如有必要,我可以提供一个独立的工作示例——我只是从一个更大的代码库中提取了这个示例)

本质上,只需Lift为我的新类型派生,我就可以将数据类型放在表达式准引用[| txt |]器中以实现quoteExp.

但我遇到了麻烦quotePat。如果我这样做:

然后我收到第一个 txt 未使用的警告,第二个遮住了第一个。我很确定该模式只是创建一个新名称txt,而不是txt像 quasi quoter 表达式那样在范围内拼接,因为当我这样做时:

一切都符合第一个陈述。

0 投票
1 回答
45 浏览

r - 传递缺少的准引用参数

我正在尝试使用 quasiquotation 将原始变量名称传递给函数,然后将其传递给另一个函数。但是,参数是可选的,所以我需要测试第一个函数是否没有给出参数并将缺少的参数传递给第二个函数。

在这些示例b中,指的是 data.frame 中的变量。

测试一个函数是否传递了一个原始变量表达式或没有参数,我做

如果没有enexpr,变量b将尝试被评估 - 并且当丢失时 - 错误。

接下来,我尝试将缺少的参数传递给另一个函数 ( bar),然后该函数将测试它的存在:

问题:如何bar测试是否foo2通过了参数?

使用 rlang 0.3.0.1 运行 R 3.5.1。

0 投票
1 回答
51 浏览

r - 使用 dplyr 进行 quasiquotation 的混合输入

我已经将准报价提升到了最高水平。 我快要拿到我的准报价大师徽章了(见下面的编辑)。还剩下一点挑战。

使用不同的输入来创建 dplyr 的 quosures。最终结果是:

我已经设法从带有字符串的自定义表中构造了上面的表达式,如下所示:

其中context_col, phrase_col,target_col是我定义了参与规则的表中的字符串列。

例子:

告诉我找到那些宝马的 as Serie X5,我稍后会用 just 替换它,X5但那是另一个故事。

在打印报价时,我注意到表达式运行良好,但中间 quosure 给出了错误。

在 quosure 中,我有一个额外的东西^,它将 str_detect 的结果转换为一个字符。

我如何将这个中间 quosure 整合到外部?

谢谢。

编辑

在查看解决方案后,最终发现此挑战中的问题不是引用,而是在列中if_else正确使用。detect那就是将逻辑变成字符,或者只是让虚假子句相应地采取行动。

因此,另一种解决方案是if_else(!!cond_expr, !!inter_quo, FALSE)从头开始设置。

0 投票
1 回答
255 浏览

haskell - lisp 反引号和拼接的 Haskell 模拟

在某些 lisp(例如elispcommon lisp)中,有一个称为反引号的功能。

它允许在评估或拼接一些元素的同时构造一个列表。例如:

我想,在 Haskell 中,反引用的一些子集可能如下所示:

我想知道,是否可以像这样拼接到列表中,是否已经实现。

0 投票
1 回答
221 浏览

clojure - Clojure 中嵌套准引用处理的规则是什么?

Clojure 中的嵌套准引用处理规则是什么?我正在编写一个 Lisp 变体,其中符号是卫生的(自动生成符号)。我得到了使用 auto gensym 的单级准引用,但我不确定何时进入两级或更多级嵌套。

如何处理带有可嵌套卫生符号的准引号?


扩展的一般规则是什么?例子: