问题标签 [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.
r - ggplot2非标准评价
由于我需要在函数中使用 ggplot2,因此需要非标准评估模式。因此,aes_string
使用 with "price"
。但是,则..count..
不再定义
r - 为什么必须使用两轮表达式引用来定义 local({...})?
我试图了解 R 的local
功能是如何工作的。有了它,你可以打开一个临时的局部作用域,这意味着发生在local
(最值得注意的是变量定义)中的东西,保留在local
. 只有块的最后一个值被返回给外界。所以:
local
定义如下:
据我了解,会发生两轮表达式引用和后续评估:
eval(quote([whatever expr input]), [whatever envir input])
由 生成为未评估的调用substitute
。- 调用在
local
的调用者框架(在我们的例子中是全局环境)[whatever expr input]
中进行评估,因此在[whatever envir input]
但是,我不明白为什么第 2 步是必要的。为什么我不能local
像这样简单地定义:
我认为它会expr
在空环境中评估表达式?所以定义的任何变量都expr
应该存在envir
并因此在结束后消失local2
?
但是,如果我尝试这个,我会得到:
因此a
泄漏到全球环境。为什么是这样?
编辑:更神秘:为什么它不会发生:
html - 使用 updateInputSlider 更新格式的非标准评估:错误?
我有一个闪亮的应用程序,它具有在多种语言之间翻译其文本的功能,方法是使用一些 RenderText 和一个 ActionButton 在语言之间切换。这是我的应用程序:
它工作正常,除了我的滑块标签最初是用 html 标签格式化的h3()
,当我使用时,updatesliderinput
我松开了这个标签,它返回到纯文本。我尝试在翻译中添加标签paste0
,或使用不同的语法,eval
但它以文本形式打印粘贴的结果,而不是运行它或给出错误。在保持格式的同时翻译有什么想法吗?谢谢
注意:我对包含 URL 链接的文本也有同样的问题。
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 帮助文件,但我仍然无法真正理解。
我想知道为什么上面那些不起作用的功能不起作用,以及为什么起作用的功能起作用。我不一定需要一个功能一个功能的批评。如果您能陈述体现所需理解的一般原则,那将是令人愉快的。而且绰绰有余。
r - deparse(substitute()) 正常返回函数名,但在 for 循环内调用时返回函数代码
我对 R 在一个非常具体的情况下的行为感到有点惊讶。假设我定义了一个square
返回其参数平方的函数,如下所示:
我想在另一个函数中调用这个函数,我也想在我这样做的时候显示它的名字。我可以使用deparse(substitute())
. 但是,请考虑以下示例:
这是预期的输出,所以一切都很好。但是,如果我传递包含在列表中的函数并使用 for 循环对其进行处理,则会发生以下情况:
谁能向我解释为什么会发生这种情况以及如何防止它发生?
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 中更核心)。
r - 使用非标准评估迭代在某些内部环境中定义的符号
我想让下面的程序工作。
我知道,错误在于list(f1, f2)
,但到目前为止我还没有找到让它工作的方法。问题是f1
并且f2
在外部环境中不为人所知func
,但我想将它们作为名称/符号传递......
r - 使用整洁的评估选择命名的 [list] 元素
我正试图围绕非标准评估,因为它在rlang包中进行了解释。考虑到这个目标,我的问题是:
如何编写
dplyr::select.list()
符合 tidy 评估原则的函数?
这是我目前如何编写包装器的示例dplyr::select()
:
这适用于数据帧,例如,
但不在名单上:
老实说,我不确定上面的输出中发生了什么......它返回一个交互式提示,要求我选择我想要的元素。这不是很理想,imo。
无论如何,我想要完成的是一个select.list()
函数,它返回我通过非标准评估选择的命名元素列表。这是我的解决方案,但感觉太老套了:
有没有更干净、更整洁的评估一致的方法来做到这一点?
apache-spark - sparklyr 和基于标准评估 (SE) 的函数
我正在尝试编写一个函数来执行并sdf_pivot()
创建一个 Spark DataFrame,其列名包含原始变量或列的名称。
这是var1
不编写函数的预期结果:
在我的一个功能版本下面,当然不起作用,我也尝试过quote
and deparse
,但我都坚持使用mutate_
and sdf_pivot
。
r - 使用 R data.table 中的非标准评估了解范围
如何确保我的非标准评估1使用data.table
从父框架继承它需要的变量?
根据我对动态范围的理解,我下面的代码应该可以工作,但不能。我究竟做错了什么?
细节
我有许多函数的列表,我想将它们应用于data.table
返回布尔检查和消息的单个函数(当检查为 TRUE 时)。例如,假设我正在审计一个帐户表。
我正在遍历规则列表并检查每个规则的数据集。
期望的输出
这在全球环境中运行良好。
什么不起作用(需要解决方案)
导致错误:
这不是问题with()
,尽管我已经阅读 ( ?with
),通常应该避免将其用于编程。这也不起作用:
顺便说一句:rm(balance_limit, grace_period)
如果你在“什么不起作用”功能之前不做——即将它们留在全局环境中——你会得到想要的结果。因此,似乎function(item)
-edlapply
可以“看到”全局环境,但不能“看到”父环境(AuditTheData
)。
1我在这里使用“不寻常”的不科学意义上的“非标准”。我知道什么是非标准的,但这是另一个(而且过于宽泛?)的问题。