问题标签 [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 回答
1296 浏览

r - ggplot中函数内aes(...)中变量的范围

考虑一下ggplot(...)函数内部的这种使用。

看起来ggplot无法识别i函数内部定义的变量,但可以识别i它是否在全局环境中定义。这是为什么?

请注意,这给出了预期的结果。

0 投票
1 回答
102 浏览

r - plyr 函数和标准评估

我想将 plyr 函数包装在我自己的函数中。我想向函数传递一个对象和应用剪切函数的变量(未加引号)。

我不知道如何在 ddply 中使用对象 var 将其值指定为变量,而不是将“var”指定为变量。

与 dplyr 不同,没有 plyr 函数的标准评估版本?我读到我可以使用字符串,但例如dlply(x, .(week = cut("time", "1 week")), "[")失败

我也尝试过lazyeval,但我迷失在标准/非标准评估领域。

0 投票
2 回答
1484 浏览

r - 使用标准评估更改 dplyr::count 中的变量名称

dplyr::count_当以标准评估方式使用分组变量时,如何更改其名称

例如,如果在最后的 tbl 中我不想要 var 名称 "Species" 而是 "Type" :

我也想知道这个表达式是如何dplyr::count_工作的以及这个表达式应该做什么?你有解释吗?

谢谢 !

0 投票
1 回答
787 浏览

r - 使用lazyeval进行变异的标准评估

我正在尝试制作我自己的函数来包装 dplyr 函数。

我有一个数据框列表,我想用给定的标签修改指定变量的级别(两者都应该是函数的参数)。

这是我到目前为止所尝试的:

但我无法让它工作,我只是不明白为什么......你知道我错过了什么吗?谢谢。

0 投票
1 回答
297 浏览

r - 非标准评价,高级 R 书中的混乱

所以在 Hadley 的高级 R 书中,有一个使用替代的问题示例,这里是代码的摘录:

你能看出问题所在吗?condition_call 包含表达式条件。因此,当我们评估 condition_call 时,它也会评估 condition,它的值 a >= 4。但是,这无法计算,因为在父环境中没有名为 a 的对象。但是,如果在全局环境中设置了 a,则可能会发生更令人困惑的事情:

在本书的上述段落中,有几件事让我感到困惑。

  1. 句子“condition_call 包含表达式条件”。符号“条件”在函数子集 2 中用作形式参数,也用于 scramble(subset2(x,condition)) 中的实参数。我猜他提到了这个真实/调用参数“条件”,对吗?

  2. 作为一个承诺,subscramble 定义中的条件是惰性求值的?为什么调用时不评估它:scramble(subset2(x,condition))

换句话说,我如何通过查看代码来知道一个 Promise 是否被评估?例如,如果我理解正确,如果我将代码更改为以下内容:

现在条件被强制评估。这里有什么规则?

  1. 当 Hadley 说“当我们评估 condition_call 时,它也会评估 condition”,“它”是什么?他的意思是“评估”触发了某种内部或二次评估,试图解决承诺“条件”吗?这发生在哪里?即R试图使用什么环境来找出“条件”的值是什么?

  2. 所以错误“object a not found”不是由于下面调用中的“x”或“parent.frame()”,而是在其他地方?我完全糊涂了。

    r <- eval(condition_call, x, parent.frame())

0 投票
1 回答
71 浏览

r - 为什么我使用 SE 或 NSE dplyr 函数得到不同的结果

嗨,当我通过lazyeval 包使用标准评估时,我从 dplyr 函数中得到了不同的结果。

以下是如何使用 250k 行和大约 230k 组重现接近我的真实数据的内容。我想按 id1、id2 分组,并为每个组使用 max(datetime) 对行进行子集化。

当我使用 NSE 方式时,我得到了 230000 行

但是当我使用 SE 时,我只有 229977 行

我的两段代码是等价的吧?为什么我会遇到不同的结果?谢谢。

0 投票
2 回答
275 浏览

r - R 包函数中的标准评估与非标准评估

建议,R-package 函数内部的函数调用最好使用标准评估(见这里),尤其是避免utils::globalVariables.

如果我对dplyr包使用非标准评估,那么以下代码片段的标准评估的“翻译”是什么 - 特别是对于table-command?

grpdep是数据框的数值mydfx而是一个因素。

非标评价:

标准评价?

而且,函数调用ggplot呢?是否ggplot有标准评估支持?

编辑:添加了可重现的示例。

0 投票
0 回答
159 浏览

r - dplyr 过滤器的标准评估版本似乎被忽略

我正在尝试编写一个函数,用户将在其中指定数据框和列名(字符串)并将字符串传递给dplyr filter函数。

我相信我应该使用filter_,但我似乎无法让它按预期运行。

考虑下面的数据框data。如果我想将它通过管道传输到 NSE 版本,filter则完成如下所示

但是,当我尝试在函数中实现它时,过滤器似乎被忽略,如下所示。

这不是通过函数传递参数的细​​微差别,因为返回的结果完全相同。

问题:如何编写具有所需参数的函数来过滤数据帧dplyr

0 投票
1 回答
62 浏览

r - 使用 mutate_ 进行标准评估以按组计算百分比

我正在尝试使用标准评估dplyr来计算百分比作为两个分组变量的函数。问题出在我的mutate_ statement.

这是一个数据集:

这是我正在使用的代码:

当我运行代码时,我收到一个错误:

setNames(list(interp(quote(n_in_group/sum(n_in_group, na.rm = TRUE) * ) 中的错误:缺少参数“nm”,没有默认值)

有什么想法吗?

0 投票
1 回答
536 浏览

r - 我应该如何在包中使用 uq() 函数?

我对uq()函数的行为感到困惑。当我使用uq()or时,行为是不一样的lazyeval::uq()

这是我的可重现示例:

首先,我生成一个假数据集

然后我写了一个玩具函数,toy_function_v1只使用uq()

和第二个函数使用lazyeval::uq()

令人惊讶的是,v1 和 v2 的输出不一样:

有什么解释吗?

我知道使用语法package::function()在新包中使用函数是一个好习惯。那么在这种情况下最好的解决方案是什么?

这是我的 session_info :