问题标签 [lazyeval]
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 - 变量作为函数的默认参数,使用 dplyr
目标
我的目标是定义一些在dplyr
动词中使用的函数,这些函数使用预定义的变量。这是因为我有一些函数需要一堆参数,其中许多总是相同的变量名。
我的理解:这很困难(也许是不可能的),因为dplyr
稍后会懒惰地评估用户指定的变量,但是任何默认参数都不在函数调用中,因此对dplyr
.
玩具示例
考虑以下示例,我用它dplyr
来计算变量是否已更改(在这种情况下毫无意义):
现在,lag
还支持像这样的交替排序:
但是,如果我想创建自己的版本lag
,总是按顺序排列gear
怎么办?
失败的尝试
天真的方法是这样的:
但这显然会引发错误:
未找到名为“gear”的对象
更现实的选择是这些,但它们也不起作用:
问题
有没有办法在正在运行的 data.frame 中lag2
正确找到?gear
dplyr
- 一个人应该能够打电话
lag2
而无需提供gear
。 - 应该能够
lag2
在未调用的数据集上使用mtcars
(但确实具有gear
它的变量)。 - 最好
gear
是函数的默认参数,因此如果需要,它仍然可以更改,但这并不重要。
r - 如何在lazyeval中将'...'参数传递给interp()公式
我正在尝试进行一些参数化dplyr
操作。表达问题根源的最简单的可重现示例是:
这就是我一个人走了多远
尝试使用“na.rm”参数
非常感谢您的帮助!
r - 在 mutate 中动态地为函数提供参数
首先 - 如果以前有人问过这个问题,我很抱歉,我已经看过并且无法找到与我正在尝试做的事情相匹配的任何内容。
我正在尝试创建一个根据数据框中用户生成的列对数据进行分箱的函数。为此,我使用了 dplyr 中的 mutate() 函数和 base R 中的 cut() 函数。但是,我无法弄清楚如何使用通过 cut() 函数内部的函数传递的列名(其中出现在 mutate 中)。
我已经花了几个小时浏览这个和这个,但仍然没有弄清楚。我的理解是下面代码中的 foo()、bar() 和最后一行都应该产生相同的输出。但是,我得到了两个函数错误,一个没有包含在函数中并且只使用硬编码列名的错误可以正常工作。
这里发生了什么?为什么 foo() 产生的输出与 bar() 不同?以及如何正确使用lazyeval 来允许函数中的正确行为?
r - 我应该如何在包中使用 uq() 函数?
我对uq()
函数的行为感到困惑。当我使用uq()
or时,行为是不一样的lazyeval::uq()
。
这是我的可重现示例:
首先,我生成一个假数据集
然后我写了一个玩具函数,toy_function_v1
只使用uq()
:
和第二个函数使用lazyeval::uq()
:
令人惊讶的是,v1 和 v2 的输出不一样:
有什么解释吗?
我知道使用语法package::function()
在新包中使用函数是一个好习惯。那么在这种情况下最好的解决方案是什么?
这是我的 session_info :
r - 错误:包或命名空间加载失败
在 R 中加载一些库时出现以下错误:
库(预测)错误:对象'f_eval'不是由'namespace:lazyeval'导出另外:警告消息:包'forecast'是在R版本3.3.2下构建的错误:'forecast'的包或命名空间加载失败</ p>
库(tsoutliers)错误:对象'f_eval'未由'namespace:lazyeval'导出另外:警告消息:包'tsoutliers'是在R版本3.3.2下构建的错误:'tsoutliers'的包或命名空间加载失败</ p>
我尝试重新安装软件包,但没有帮助。此外,我之前能够使用预测包,但是在安装 tsoutliers 包后我开始面临这个错误。
我该如何解决这个问题?
r - 使用 dplyr 在函数内传递列名
我知道在函数内部使用lazyeval来使用dplyr引用列名,但我被卡住了。一般来说,当创建一个使用dplyr的函数时,该函数还从函数参数中引用列名,实现这一目标的最惯用方法是什么?谢谢。
r - 使用标准评估、Forcats 和 Stringr 重新编码多个满意度量表变量的函数
下面是一个简单的数据框示例的数据...
下面的代码是将满意度得分列重新编码为满意、不满意和中立三个类别。
但是,我的真实示例涉及为多个文件重新编码相同的满意度等级,每个文件都有不同数量的满意度等级列。所以我想把它包装成一个函数,允许我输入数据框名称,以及要重新编码的任意数量的列。下面是我正在尝试使用的代码的一种变体,但我无法让它工作。我一直在玩 .dots 和“...”,但找不到任何有用的东西。
我应该对 mutate_at 使用标准评估吗?另外,我是否必须将 .dots 与 ... 一起使用?如果标准评估不适用于 mutate_at,我愿意使用其他功能/技术来实现相同的最终目标,最好是在 tidyverse 中。
r - 在 glm 函数中使用二项式时,lazyeval 找不到“C_logit_link”
我真的在这里挠头。我真的不明白发生了什么。这是一个 MWE,但实际代码和目的比这更复杂。所以代码:
返回:Error in family$linkfun(mustart) : object 'C_logit_link' not found
...但此代码位工作正常:
两者之间的唯一区别是使用的家庭分布(高斯与二项式)和使用的变量。
所以问题是:为什么lazyeval 找不到C_logit_link
?
r - 如何在函数中的ggplot facet_wrap中传递列名
如何在 ggplot facet_wrap 中传递数据框的列名或在函数中填充/颜色?我查找了lazyeval,但没有找到方法。
在这个例子中,为什么点没有被 x 着色?
r - R惰性评估ifelse逻辑条件
我有以下内容data.table
:
我想做类似以下功能的东西,但是在参数化函数中:
为此,我创建了以下函数:
我将非标准评估函数 (group_by_
和summarise_
) 与lazyeval::interp
函数结合使用,但==
条件没有以正确的方式解释,并且出现以下异常:
我尝试了许多不同的组合(quote
, expr_env
,as.lazy
等),但都没有成功。感谢这个伟大的非标准评估指南,我之前能够使用这些lazyeval
函数来评估算术表达式,但我找不到让它们解释这段代码中的逻辑条件的方法。
任何帮助将不胜感激。