【发布时间】:2015-10-13 20:06:41
【问题描述】:
我希望有人可以帮助确定我在将惰性评估用作 dplyr filter_ 动词的一部分时收到错误消息的原因。最终目标是使用函数通过引用传递参数,但我已将问题范围缩小到函数之外。
library(dplyr)
library(lazyeval)
library(data.table)
data_raw_dt <- data.table(
R_dates = seq(from = as.Date("2015/8/31"), by = "1 day", length.out = 30),
grp_region = sample(letters[1:4], 30, replace = TRUE),
z_valuation = rnorm(30)
)
# Create some NAs
data_raw_dt$grp_region[data_raw_dt$grp_region == "d"] <- NA
dates = "R_dates"
group = "grp_region"
column = "z_valuation"
filter_criteria = interp(~(!is.na(var)), var = as.name(group))
data_raw_dt %>%
filter_(filter_criteria)
但这会给出以下错误消息: “lazyeval::common_env(.dots) 中的错误: 缺少参数“.dots”,没有默认值”
在这种情况下,我不确定如何指定 .dots 以及当我这样做时会要求提供一个列表。我检查了here、here 和here,并按照这些示例构建了我的代码,但没有成功。
包版本: dplyr 0.4.2 懒惰评估 0.1.10 数据表1.9.4
有人有什么想法吗?提前非常感谢您!
【问题讨论】:
-
请提供最小的reproducible example。留下任何与错误无关的代码。如果实际上没有定义任何变量,我们就无法测试代码以查看问题所在。是的
filter_(.dots=list(filter_criteria))? -
包括
dplyr和lazyeval的版本,来自sessionInfo() -
@MrFlick 谢谢,我提供了更多可重现的代码并发布了包的版本。事实证明,当我使用 data.frame 而不是 data.table 时,问题就消失了。将 data.table 添加到这个问题。让我知道我是否需要做任何其他事情来改进这个问题的格式,或者现在需要删除/修改它,因为它是一个 data.table 与 data.frame 的问题。
-
如果我复制/粘贴上面的代码,我不会收到任何错误(
lazyeval_0.1.10、dplyr_0.4.3、data.table_1.9.6) -
@MrFlick,再次感谢您的测试,我将升级我的 R 和软件包
标签: r data.table dplyr lazy-evaluation