问题标签 [non-standard-evaluation]

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 投票
0 回答
112 浏览

r - ggplot2非标准评价

由于我需要在函数中使用 ggplot2,因此需要非标准评估模式。因此,aes_string使用 with "price"。但是,则..count..不再定义

0 投票
1 回答
36 浏览

r - 为什么必须使用两轮表达式引用来定义 local({...})?

我试图了解 R 的local功能是如何工作的。有了它,你可以打开一个临时的局部作用域,这意味着发生在local(最值得注意的是变量定义)中的东西,保留在local. 只有块的最后一个值被返回给外界。所以:

local定义如下:

据我了解,会发生两轮表达式引用和后续评估:

  1. eval(quote([whatever expr input]), [whatever envir input])由 生成为未评估的调用substitute
  2. 调用在local的调用者框架(在我们的例子中是全局环境) [whatever expr input]中进行评估,因此在[whatever envir input]

但是,我不明白为什么第 2 步是必要的。为什么我不能local像这样简单地定义:

我认为它会expr在空环境中评估表达式?所以定义的任何变量都expr应该存在envir并因此在结束后消失local2

但是,如果我尝试这个,我会得到:

因此a泄漏到全球环境。为什么是这样?

编辑:更神秘:为什么它不会发生:

0 投票
1 回答
40 浏览

html - 使用 updateInputSlider 更新格式的非标准评估:错误?

我有一个闪亮的应用程序,它具有在多种语言之间翻译其文本的功能,方法是使用一些 RenderText 和一个 ActionButton 在语言之间切换。这是我的应用程序:

它工作正常,除了我的滑块标签最初是用 html 标签格式化的h3(),当我使用时,updatesliderinput我松开了这个标签,它返回到纯文本。我尝试在翻译中添加标签paste0,或使用不同的语法,eval但它以文本形式打印粘贴的结果,而不是运行它或给出错误。在保持格式的同时翻译有什么想法吗?谢谢

注意:我对包含 URL 链接的文本也有同样的问题。

0 投票
1 回答
169 浏览

r - dplyr,rlang:无法预测将名称传递给嵌套 dplyr 函数的次要变体是否会起作用

再现性数据

该函数应该将其数据和其他参数作为不带引号的名称,在数据中找到这些名称,并使用它们添加一列并过滤掉第一行。这没用。变异说找不到了。

这个函数,我是通过拼写错误找到的——注意 mutate 语句中的 .i 而不是 .j ——完成了前一个函数应该做的事情。我不知道为什么。我认为它正在跳过函数参数并在全局环境中查找 .i 。或者也许它正在使用一个ouiji板。

由于 mutate 在以通常的 R 方式传递给它时找不到 .j,因此可能需要以 rlang 样式的 quosure 传递,就像形式 X 和 Y 一样。这个函数也不起作用,UQ in mutate 说它找不到了。与上面的第一个函数一样,如果将 mutate 中的 .j 替换为 .i,它就会起作用。(似乎应该有一个平行现状的“enquos”)。

最后,似乎一旦在 mutate 中进行了 .i 替换,t4() 就不再需要数据参数了。见下文,我将其替换为 bop_foo_foo。但是,如果您将 bop_foo_foo 全部替换为数据名称 .i, (t5()),则 UQ 再次无法找到 a。

在我看来,上面的函数似乎是单个函数的相对较小的变体。我又跑了几十次,虽然我观察到了一些模式,并且阅读了不知道多少遍的 enquo 和 UQ 帮助文件,但我仍然无法真正理解。

我想知道为什么上面那些不起作用的功能不起作用,以及为什么起作用的功能起作用。我不一定需要一个功能一个功能的批评。如果您能陈述体现所需理解的一般原则,那将是令人愉快的。而且绰绰有余。

0 投票
1 回答
5080 浏览

r - deparse(substitute()) 正常返回函数名,但在 for 循环内调用时返回函数代码

我对 R 在一个非常具体的情况下的行为感到有点惊讶。假设我定义了一个square返回其参数平方的函数,如下所示:

我想在另一个函数中调用这个函数,我也想在我这样做的时候显示它的名字。我可以使用deparse(substitute()). 但是,请考虑以下示例:

这是预期的输出,所以一切都很好。但是,如果我传递包含在列表中的函数并使用 for 循环对其进行处理,则会发生以下情况:

谁能向我解释为什么会发生这种情况以及如何防止它发生?

0 投票
3 回答
219 浏览

r - 如何修改R函数内数据框中变量的属性

base::levels帮助文件https://stat.ethz.ch/R-manual/R-devel/library/base/html/levels.html包含以下修改变量级别的示例:

假设这些东西位于数据框内:

我想编写一个函数来转换将数据框和变量名称作为输入的级别:

这样就modify_levels(mydata,z,from=c("apple","orange"),to="fruit")完成了转换的一部分(并且modify_levels(mydata,z,from=c("salad","broccoli"),to="veg")完成了第二部分,即使该级别broccoli可能不存在于我的数据集中)。

使用一些非标准的评估巫毒,我可以缩小我需要修改的内容:

到目前为止,一切都很好(to尽管该选项没有任何作用):

现在,对于下一步,我认为我需要做的是将目标变量的级别附加一个附加级别,并更改该变量的值。在互动工作中,我会

其中我只能在val循环中以编程方式获得第一行:

这将在val循环内发生。

请注意,我想保留现有的苹果和橙子级别,而不是仅仅改变整个事情(如帮助文件中的大修示例中所做的那样)。

如果解决方案更容易通过dplyr从头开始编程来实现,那对我来说很好(尽管我的理解是带有它的 NSE 甚至dplyr比基础 R 中更核心)。

0 投票
3 回答
44 浏览

r - 使用非标准评估迭代在某些内部环境中定义的符号

我想让下面的程序工作。

我知道,错误在于list(f1, f2),但到目前为止我还没有找到让它工作的方法。问题是f1并且f2在外部环境中不为人所知func,但我想将它们作为名称/符号传递......

0 投票
2 回答
1200 浏览

r - 使用整洁的评估选择命名的 [list] 元素

我正试图围绕非标准评估,因为它在rlang包中进行了解释。考虑到这个目标,我的问题是:

如何编写dplyr::select.list()符合 tidy 评估原则的函数?

这是我目前如何编写包装器的示例dplyr::select()

这适用于数据帧,例如,

但不在名单上:

老实说,我不确定上面的输出中发生了什么......它返回一个交互式提示,要求我选择我想要的元素。这不是很理想,imo。

无论如何,我想要完成的是一个select.list()函数,它返回我通过非标准评估选择的命名元素列表。这是我的解决方案,但感觉太老套了:

有没有更干净、更整洁的评估一致的方法来做到这一点?

0 投票
1 回答
170 浏览

apache-spark - sparklyr 和基于标准评估 (SE) 的函数

我正在尝试编写一个函数来执行并sdf_pivot()​​创建一个 Spark DataFrame,其列名包含原始变量或列的名称。

这是var1不编写函数的预期结果:

在我的一个功能版本下面,当然不起作用,我也尝试过quoteand deparse,但我都坚持使用mutate_and sdf_pivot

0 投票
1 回答
171 浏览

r - 使用 R data.table 中的非标准评估了解范围

如何确保我的非标准评估1使用data.table从父框架继承它需要的变量?

根据我对动态范围的理解,我下面的代码应该可以工作,但不能。我究竟做错了什么?

细节

我有许多函数的列表,我想将它们应用于data.table返回布尔检查和消息的单个函数(当检查为 TRUE 时)。例如,假设我正在审计一个帐户表。

我正在遍历规则列表并检查每个规则的数据集。

期望的输出

这在全球环境中运行良好。

什么不起作用(需要解决方案)

导致错误:

这不是问题with(),尽管我已经阅读 ( ?with),通常应该避免将其用于编程。这也不起作用:

顺便说一句:rm(balance_limit, grace_period)如果你在“什么不起作用”功能之前不做——即将它们留在全局环境中——你会得到想要的结果。因此,似乎function(item)-edlapply可以“看到”全局环境,但不能“看到”父环境(AuditTheData)。


1我在这里使用“不寻常”的不科学意义上的“非标准”。我知道什么是非标准的,但这是另一个(而且过于宽泛?)的问题。