问题标签 [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 投票
4 回答
213 浏览

list - 为什么可以在准引用列表末尾的非列表上使用取消引用拼接?

quasiquoted 列表`(1 ,@2 3)无效,因为 2 不是列表。但是,`(1 2 ,@3)它是有效的并且会返回一个虚线列表:(1 2 . 3)。我在 Common Lisp 和 Scheme 中观察到了这个结果。为什么可以在 quasiquoted 列表的末尾对非列表使用 unquote-splicing?为什么结果是点列表?

0 投票
2 回答
40 浏览

r - {testthat} `quasi_label` 和 `expect_match` 抛出“错误:参数类型无效”

我是 {testthat} 的新手,并且正在为修改字符串的函数构建测试,并且预计会为某些输入模式生成特定的输出。

作为示例(下面的表示形式),add_excitement在其输入字符串中添加一个感叹号。当输入“hello”时,它应该返回“hello!”;当给出任何其他输入时,它不应该返回“你好!”。我想对一系列模式进行{testthat} 行为并返回信息性错误,这些错误指定导致错误的模式。

基于 {testthat} 包文档,我相信我应该使用expect_match. 但是,这会引发“无效的参数类型”错误,而expect_identical有效。我不明白为什么会这样。我的问题是:

  • 为什么不expect_identical接受expect_match这个quasi_label论点?
  • 我可以使用expect_identical而不是expect_match用于我的目的,还是会冒其他错误的风险?

这是一个代表:

reprex 包于 2021-02-04 创建(v0.3.0)

谢谢您的帮助!

0 投票
0 回答
201 浏览

r - 使用 data.table 时,使用参数呈现多个 Rmarkdown 报告失败并显示“错误:`:=` 只能在 quasiquoted 参数中使用”

大家早上好,

如上所述,我正在尝试为每个报告呈现具有不同参数的多个 Rmarkdown 报告。基本上我有一个 .csv 文件的文件夹,我必须清理它。我已将所有步骤打包在一个 .Rmd 文件中,因为这样可以清理数据并生成一份简短的报告来记录结果。一些数字,一些统计数据,没有什么戏剧性的,只是对清洁过程的概述。

由于每个 .csv 文件略有不同,我必须调整一些参数。这是简单的部分。我在“R for Data Science”一书中找到了一些不错的代码,你可以在这里找到。https://r4ds.had.co.nz/r-markdown.html#parameters

这是我的版本:

当 .Rmd 文件使用 data.frames 时,一切运行良好。由于我的 .csv 每个大约 1 GB,我会使用 data.table 来加快速度。但是,一旦我的 .Rmd 文件包含一些 data.table 代码,我就会收到以下错误消息:

如果我只用 .Rmd 渲染一个文件rmarkdown::render(input = "template_datatable.Rmd", output_file = "test.html", params = list(name = "datatable", carat = 5)),那么带有 data.table 代码的 .Rmd 就可以正常工作。

我的问题是。是什么导致了这个错误?有没有办法解决它?

这是我使用 data.frames 的 .Rmd 代码:

我使用 data.tables 的 .Rmd 代码:

谢谢你的帮助。

0 投票
1 回答
40 浏览

r - 在R中的函数内取消引用参数

我无法弄清楚为什么我的函数中的 bang-bang 运算符没有取消引用我的grp论点。任何帮助将非常感激!

它只是生成整个数据的摘要,而不是按物种分组: 输出

0 投票
2 回答
68 浏览

r - tidyr 稍后在函数中使用胶水字符串

Tidy eval 现在支持胶水字符串

所以这很好用:

但是之后

投掷

零件中的一些“粘贴”或“胶水”可以"mean_{{mean_var}}_plusone" := "mean_{{mean_var}}"+1解决这个问题吗?

请注意,这显然不是一个有用的案例,它是语法的 MWE。我实际上想定义两个具有不同名称的新列,一个使用另一个......否则我必须重复它也会变得混乱。

0 投票
1 回答
56 浏览

haskell - 在 where 语句中使用声明引用器

我正在实现一个基于使用标准haskell 函数/组合器来构建数据库查询的DSL。从实现 POV 中,我决定在查询中表示变量,如下所示:

然而,这迫使用户Var "something"经常写作,所以我决定编写一个自动执行此操作的 quasiquoter。

这是 DSL 的一个示例:

我希望它是什么:

或类似的东西。

我写的准引用者在这里:

原来我只写quoteVars。为了在 ghci 中进行测试,我添加了expQuoteVars. 但是,现在删除后一个并尝试编写

给我留下两个错误:

因为where [quasiquoter]之后一无所有

我如何使用 quasiquoterquoteDec代替a quoteExp?这可能吗?

如果这样更容易,我也愿意像这样使用它:

我查看了 wiki.haskell.org 和 TH 模块的“教程”和信息站点,但无法弄清楚如何做到这一点...... https://wiki.haskell.org/Template_Haskell#What_to_do_when_you_can.27t_splice_that_there https ://wiki.haskell.org/Quasiquotation https://wiki.haskell.org/A_practical_Template_Haskell_Tutorial

0 投票
1 回答
57 浏览

haskell - 如何获取 Haskell 代码字符串(连同值)

我想同时获取任意 Haskell 代码的字符串和值。例如:

我想这样做的原因是因为我正在编写一种编程语言,并且我想提供一个选项来解释代码(用于快速运行,即脚本)或将其编译为 Haskell 代码(用于高效运行时)。因此,对于每个内置函数,我只想提供一次实现。那就是我不想说

我有一些想法,包括阅读原始的 haskell 源代码或生成编译器的单独脚本,但如果这个问题是可能的,这些似乎不太优雅。

看起来 QuasiQuotation 可以使这成为可能,但是如果我使用它,我无法弄清楚如何获取表达式的 Haskell 值(我只能获取字符串)。

是否可以?如何做呢?

0 投票
1 回答
48 浏览

r - 从字符串赋值给变量

我想从字符串动态创建一个变量名,然后分配一个值。我相信我应该能够轻松地做到这一点,{rlang}但无法从包文档、高级 R和搜索中解决。下面是我正在寻找的伪代表。感谢您的指导!

我想要的输出:answer <- 42

我的输入:(x <- "answer"除了“答案”是生成的并且没有在脚本中硬编码)

试图:rlang::sym(x) <- 42

0 投票
2 回答
178 浏览

r - 什么!!R中的运算符均值

任何人都可以解释一下,我们需要什么!!!!!或者{{}}运营商来自rlang哪里?我试图了解更多关于 quasiquotation 但没有得到任何东西。

我已经在 Stack 上看到了几篇关于 curly-curly 运算符的帖子,并且了解到{{我们在将数据帧的变量(或我们对象的其他子对象)传递给函数时使用。但是在阅读了quote/unquote之后,我对所有这些运算符及其用法完全感到困惑。

为什么我们需要它,为什么有些函数没有它就不能读取参数,最后,它们实际上是如何工作的?

如果您以我能理解的最简单的方式给出答案,我将不胜感激(也许有例子?)。

0 投票
2 回答
53 浏览

r - 使用 dplyr 在自定义函数中无法识别默认参数

拿这个功能foo()。我希望它有一个默认参数,cyl因为这是它通常会处理的字段的名称。

但令我惊讶的是,除非我明确提供默认参数,否则该函数将不起作用。请参阅下面的失败代码

Error: Problem with `mutate()` column `cyl_refactor`. ℹ `cyl_refactor = foo()`. x object 'cyl' not found

似乎只有当还有如下数据参数时才会处理默认参数。

我确信我对 quasiquotation 的了解存在一些差距,但我想了解如何在foo().