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

r - 确定函数是否具有标准评估

有没有办法以编程方式判断中的给定函数是否具有标准评估,如果没有,函数评估的哪个组件 -

  • 解析,
  • 匹配,
  • 范围界定,
  • 承诺形成,
  • 承诺兑现,
  • 返回,

等等——是非标准的吗?我知道闭包可能是标准的,而原语可能是非标准的,但两种方式都有例外。我问的是确定函数语义对于这些事物中的每一个是否是标准的,而不是函数机制是否是标准的。

我认为这些东西应该是通过仔细仔细阅读帮助页面、失败的代码和失败的任何引用的源代码得出的。但是,如果我有一种机械的方式来快速识别给定功能的评估中的非标准特征,那将会为我省去很多麻烦。

如果没有办法以编程方式识别函数非标准的所有方式,是否有方法测试标准的 任何 方面?

0 投票
2 回答
53 浏览

r - 将字符串转换为命名函数参数

我有一个打算从命令行调用的 R 脚本,其中包括一个可以采用选项...参数的函数。我想将命令行中给出的任何参数解析为.... 我该怎么做?

我试过 rlang 包。我认为这样的事情会起作用:

在这里,我希望得到一个向量,就好像我调用了c(x=1, y=2). 相反,我得到一个名称列表x=1&c。

0 投票
2 回答
40 浏览

r - 使用非标准评估对函数参数的评估不正确?

假设我们有一些向量和数据框:

我们使用非标准评估编写了一个函数,该函数计算数据帧列的平均值和向量的平均值。

这按预期工作。但是,如果我们编写相同的函数但为参数选择其他名称会发生​​什么?

第一个参数的评估与以前相同,但第二个参数始终评估数据帧的“y”列。它不应该分别评估向量“a”和“b”吗?

0 投票
1 回答
330 浏览

r - R中的标准评估和非标准评估

我对 dplyr 函数的参数感到困惑,对标准评估 (SE) 或非标准评估 (NSE) 不太清楚。我只想将一个变量传递给 dplyr::arrange() 但它失败了。但是,传递给 dplyr::select() 有效。

我使用 SE 版本搜索了一个解决方案,它可以工作:

为什么 dplyr::select() 与 NSE 中的 dplyr::arrange() 不同?

如何在全局环境中修复以下错误?

谢谢!

0 投票
1 回答
141 浏览

r - 使用 rlang 的 enexprs 捕获函数

我正在编写一个函数,以便该函数的调用者可以以声明方式编写模式:

稍后,我将能够使用此模式中声明的类型来组装数据帧。我认为这项工作的最佳人选是使用以下可用的元编程功能rlang

但是,大多数示例都与捕获表达式有关,然后将它们用作函数的参数,而不是用作函数本身。也就是说,我发现很难捕捉到以下表达式的右侧:

然后以后可以在以后评估它character(myvec),只要我得到myvec。这同样适用于以下情况:

我稍后想将其评估为factor(myvec, levels=c('fever', 'chills', 'nausea'))

谢谢!

0 投票
2 回答
214 浏览

r - 在 lapply 中将函数作为参数传递给 FUN

我正在设计一个适合模型的包,该模型涉及矩阵列的基础扩展。我希望扩展是用户定义的,以便可以进行任何扩展,例如splines::bs, splines::ns, stats::poly. 相同的展开将应用于矩阵的每一列。我尝试了一些组合,evalsubstitute无法让它在嵌套函数中工作。

我正在尝试做的事情

我试过的

0 投票
1 回答
918 浏览

r - R: '无效的下标类型符号'

我目前正在研究 Hadley 的 Advanced R book 第 2 版中关于表达式和准引用的主题。在练习部分 20.6.5 中,任务是

“实现arrange_desc(),dplyr::arrange()默认情况下按降序排序的变体。”

在玩的时候,我注意到一些让我困惑的事情。首先,我只是尝试编写一个函数,该函数将数据框和变量作为输入进行排序。我想自动引用变量来镜像dplyr::arrange()的行为

这行得通,但坦率地说,我不明白为什么:毕竟,我在这里用一个符号进行子集化。深入挖掘,我注意到如果我这样写代码,我会得到一个错误:

为什么我可以使用符号对列表进行子集化(它与此处的表达式相同吗?)以及为什么符号显然是使用列表作为环境评估的,但仅在使用时而[[不是在使用时[?换句话说,有什么区别:

0 投票
2 回答
229 浏览

r - 如何通过带引号的表达式将变量传递给使用该值返回函数的函数?

这是一个例子:

该函数在这样的环境之外可以正常工作,但是为了将它与 一起使用ggplot,它必须以一种或另一种方式引用。

不幸的是,我无法弄清楚如何正确返回包含以这种方式传递的变量的生成函数。我试过这个:

但是当我这样做时出现错误:Error in !n : invalid argument type

有谁知道如何正确使用n返回的函数中的期望值custom_percent()

在有人问之前,我知道我可以事先在摘要数据框中生成统计数据用作utils::getAnywhere()解决方法,但这不是问题的重点。

0 投票
2 回答
40 浏览

r - R:管道内动态变量的非标准评估。将 (") 替换为 (`)

我正在尝试在 adplyr pipelapply函数中使用动态字符串。其中字符串用于命名列,该列稍后在filter. 尝试过滤以!is.na()删除filter.

通常,对于这种情况,人们会使用非标准评估filter_,但是由于被调用的字符串在 内is.na()filter_因此没有效果。我要求使用主符号 (`) 而不是引号 (") 来调用字符串。

下面是一个减去lapply函数的最小示例。

我知道我可以简单地重新格式化初始字符串,但是我更好奇找到一种方法来调用以不同格式包装的字符串以在其他场景中使用。

0 投票
1 回答
280 浏览

r - 如何在 ggplot2 中的 fct_reorder() 中使用 NSE

我想知道如何使用 NSE(非标准评估)表达式fct_reorder()ggplot2复制不同数据框的图表。

这是我用来绘制图表的数据框示例:

这些是从上面的数据框绘制图表的脚本:

在此处输入图像描述

由于我有几个具有不同字段的数据框,例如数据框中的access_time_br30,access_time_br30_int而不是travel_time_br30travel_time_br30_int,因此我设置了两个变量 (g.vargo.var) 以便在同一脚本中轻松复制多个字符。

由于我需要以数字方式对因子组进行重新排序,特别是更改travel_time_br30by 的顺序travel_time_br30_int,因此我正在使用fct_reorderin 中的函数ggplot2(., aes_(...))。但是,如果我使用aes_with fct_reorder()in geom_line(),如以下脚本中的示例所示,它会返回一个错误说Error:f must be a factor (or character vector)

geom_line(size=1.4, aes_(color=fct_reorder(as.name(g.var),order(as.name(go.var)))))

Fct_reorder()似乎没有像fct_reorder_(). 在一系列脚本中同时使用 aes_ 和 fct_reorder() 是不可能的,还是有其他解决方案?