【问题标题】:R dplyr filter for non-standard evaluation (NSE) ".dots is missing, with no default"用于非标准评估(NSE)的 R dplyr 过滤器“.dots 丢失,没有默认值”
【发布时间】: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


【解决方案1】:

替换为

filter_(.dots = filter_criteria)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 2014-12-17
    • 2015-03-23
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多