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

r - dplyr NSE:在数据框中居中多列

我正在尝试使用 dplyr 将数据框中的多个列“居中”,但我不断收到“二进制运算符的非数字参数”评估错误。我认为这是因为当我的函数需要一个裸变量名时,我试图传递一个字符串。但是,使用 syms() 函数并没有帮助。

有谁知道如何解决这个问题或者是否有更好的解决方案?

0 投票
1 回答
25 浏览

r - 如何在 for 循环内的名称-值对中指定名称?

我有这个示例脚本:

我想做的是在每个花卉特征之后插入一列,其中的列从placeholder.

预期输出:

但是我的 for 循环标记了 for 循环中的第一列name,然后以错误提示终止Error: Column name already exists

我得到什么:

0 投票
1 回答
78 浏览

r - 在 R 中,当名称是字符向量的值时,如何按名称指示参数?

假设我需要这样做:

但我有'a+b'(一个字符串)保存在一个变量中,让我们说name

如何使用名称为变量中的值的元素创建该列表name

注意:我知道将名称分配给列表元素的其他方法。这里的列表只是一个例子。我想了解的是我如何处理非标准评估,以便我可以向函数指示命名参数,而无需直接内联输入。

我已经阅读了 Hadley 的Advanced R第 13 章关于非标准评估的内容,但我仍然不知道如何做到这一点。

任何具有基本 R 或整洁评估的解决方案都值得赞赏。

0 投票
0 回答
145 浏览

r - R non-standard evaluation : get promise value while leaving it unevaluated [or: keep external pointer valid...]

This a follow-up to Parallelize function taking external pointers (XPtr)

I won't reproduce the Cpp code here to make things shorter. The problem was to that once a parameter of a function is evaluated, it is defined in the function's environment and, in the case of an external pointer, is no longer available in a fork cluster.

So while this function worked:

This function didn't:

As pointed out by Ralf Stubner, this came from the fact that the call g(a, 0) forced the evaluation of the promise a. He suggested the following work around (here with two debug prints to understand how it works):

This allowed to access to whatever was in a, but a was still an unevaluated promise. But this doesn't work when test3 is called from another function!

While test4 works well (the recursive promise evaluation seems to give a valid pointer), the workaround in test3 no longer works when called from test5.

The debugging prints show that despite the eval(substitute(a)) trick, the promise is evaluated. My understanding is that this tricks forces the evaluation of the promise b of test5 in its environment, thus a becomes evaluated too.

Is there another workaround? (I tried to play with pryr::parent_promise but even the code from the example in the man page gives strange results).

I have other complex problems of this type. A general way to get the content of a promise without evaluating it, or to pass external pointers to other functions, with a parLapply call at the very end, without stumbling constantly on this problem, would be much welcome.

0 投票
3 回答
115 浏览

r - 按名称将变量传递给调用 dplyr 的函数?

我正在尝试创建一个函数,该函数将从数据集中获取 2 个变量,并将它们的不同值并排映射,然后将输出写入 csv 文件。我将使用 dplyr 的 distinct 函数来获取唯一值。

1) map_table(iris, Species, Petal.Width) 不能产生我想要的。它应该产生 27 行数据,而不是我得到 150 行数据。

2)如何在输入var1后命名csv文件?所以如果 var1 = 'Sepal.Length',文件名应该是 'Sepal.Length.csv'

0 投票
1 回答
527 浏览

r - 在函数内部调用时如何让 dplyr::mutate() 使用变量名?

我正在探索来自 Pokemon API 的数据(实际上并未使用 API,只是从 github 中提取 .csv 文件)。在一个包含每个 Pokemon 类型的窄格式(一个 Pokemon 最多可以有两种类型)的文件中pokemon_types.csv,类型被编码为整数(本质上是因子)。我想通过使用types.csv同样来自 API的查找表id(identifier想用作标签。

当我单独管道所有步骤时,我的代码可以工作,但是由于我要执行这个标记步骤至少十几次,所以我试图将它放入一个函数中。问题是,当我改为调用该函数时(据我所知,它具有完全相同的步骤)它会引发object not found错误。

设置:

违规功能:

此版本不使用该功能,适用:

它返回:

此版本使用该功能,不会:

它返回:

我知道这里有几件事可能不是最理想的(lookup例如每次下载两次),但我更感兴趣的是为什么一个看起来与某些书面代码相同的函数使它不再工作。我确信我只是犯了一个愚蠢的错误。

0 投票
1 回答
619 浏览

r - 如何在包中使用 rlang 运算符?

我正在编写一个使用 tidyverse 函数的包,即使用非标准评估,dplyr::filter例如:

我正在使用!!运算符(我可能会使用rlang包中的其他一些运算符),我想知道是否需要像使用 pipe-operator 一样显式导入它%>%,如以下问题所述:R: use magrittr pipe operator in自写包

有没有相当于usethis::use_pipe()但是对于来自的运营商的东西rlang

0 投票
1 回答
61 浏览

r - R:基本 R 函数的整洁评估?

我之前问过一个相关的问题,但我认为这以更有趣的方式构建了它。

如果一个基本的 R 函数是通用的,并且有一个或多个使用“标准”非标准评估的参数,那么提供一种“整洁”的方法来提供整洁的评估技术是否可行,如果是的话,是否明智?对于那些论点?我的形象是一些概念上标准的包装器,可以使用元编程技术为每个单独的功能量身定制。它仅适用于对当前具有非标准评估的参数的评估,并且可能仅适用于那些对引用类型进行非标准评估的参数,以便所有当前方法在通过 NextMethod() 进行参数匹配和构造后仍然可用,或者任何其他方法等效于 S4、S6 等。

我问的原因是,我一直在缓慢而痛苦地将逐渐增加的对 tidy eval 的理解塞进我的脑海,如果我认为这些强大的方法最终会成为非标准评估的标准,而不是维护永远存在多个古怪的非标准评估方法队列。

当然,我仍然必须记住,不同的非标准评估方法将由本身不是某些通用方法的原语使用。(我认为我说得对,尽管泛型函数可以有原始方法,但原始函数不能,或者至少不是,泛型的。是吗?)我已经接受了。

0 投票
1 回答
74 浏览

r - 在 R 中进行非标准评估时部分评估表达式

我正在深入研究 R 的非标准评估机制。到了一半,我仍然不时被卡住。;-)

我做了一些calculator漂亮的打印计算和结果:

这工作正常:

印刷:

但是,当调用calculatorwith 时:

输出是:

我该如何调整我calculator的顺序,以便在后一种情况下也可以打印1 + 2 = 3


我试过了:

这显然是行不通的。通话后,lapply我有一个列表并cat打印list(+, 1, 2)到控制台。

所以我又做了一次尝试:

..这和我的第一个版本一样..

0 投票
2 回答
175 浏览

r - 将带引号的列表转换为 dplyr::filter 的带引号的表达式列表

我正在编写一个函数,该函数dplyr::filter在执行其他操作之前结合了一个步骤(我想对其进行参数化)。我想为可以覆盖的过滤条件提供一个默认参数。这排除了通过... 一次尝试传递过滤参数,如下所示:

逗号分隔似乎产生了问题。查看 dplyr 的代码,它是通过调用内部函数来处理的,该函数 quo_reduce似乎将逗号分隔的值与&. 我不明白如何在不使用的情况下做到这一点...

TLDR:如何以编程方式将一组参数传递给包含默认表达式的 dplyr::filter?