【问题标题】:all.equal on object with NULL names causes 'Error: not compatible with STRSXP' -- bug or expected?具有 NULL 名称的对象上的 all.equal 会导致“错误:与 STRSXP 不兼容”——错误或预期?
【发布时间】:2014-02-18 21:31:24
【问题描述】:

在下面的示例中,当名称设置为 NULL 时,all.equal 会抛出 'Error: not compatible with STRSXP'
但是,如果名称设置为 NA(或其他值),all.equal 将正常工作。
这是预期行为还是错误?

## SAMPLE DATA
set.seed(1)
x <- data.frame(LETTERS[1:3], rnorm(3))
names(x) <- NULL

x
#   NA        NA
# 1  A -0.626454
# 2  B  0.183643
# 3  C -0.835629

all.equal(x, x)
# Error: not compatible with STRSXP

# add names back in, even 'NA'
names(x) <- c(NA, NA)
all.equal(x, x)
# [1] TRUE

【问题讨论】:

  • 我敢打赌你已经加载了 dplyr!我认为这是该包中的 all.equal.data.frame 方法中的一个错误,它正在被调度。
  • 确保在没有额外的包、R --vanilla 或类似的情况下启动 R;报告您的 R 版本。在&gt; R.version.string [1]“R 开发中(不稳定)(2014-01-22 r64855)”或“R 版本 3.0.2 已修补(2014-01-02 r64626)”下,我看不到这一点
  • @joran,我确实这样做了。感谢您为我指明正确的方向。用all.equal.default 替换all.equal 解决了它。
  • 顺便说一句,R 崩溃和完全无用的错误消息是绝对错误
  • @NiklasB.,当然,但我很好奇这样做会有什么样的缺点?

标签: r dplyr


【解决方案1】:

正如@Joran 指出的,这似乎与dplyr 有关。 归档为问题:https://github.com/hadley/dplyr/issues/219

临时解决方法(至少满足我的需要。不适用于所有人)是使用

 all.equal.default(x, x)

仅供参考:

  ## STARTING FROM A FRESH SESSION:

  set.seed(1)
  x <- data.frame(LETTERS[1:3], rnorm(3))
  names(x) <- NULL

  all.equal(x, x)
  # [1] TRUE

  ## Load in dplyr
  library(dplyr)
  all.equal(x, x)
  # Error: not compatible with STRSXP

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多