【问题标题】:data.table returns error subsetting on column valuedata.table 返回列值的错误子集
【发布时间】:2018-05-31 16:21:10
【问题描述】:

在根据单独的列值对行进行子集后尝试返回数据表的列时,我在 data.table_1.11.4 中遇到错误。例如,

library(data.table)
set.seed(123)
dt <- data.table(
  x = 1:10,
  y = LETTERS[1:10],
  z = sample(c(T, F), 10, replace = T)
)

> dt
     x y     z
 1:  1 A  TRUE
 2:  2 B FALSE
 3:  3 C  TRUE
 4:  4 D FALSE
 5:  5 E FALSE
 6:  6 F  TRUE
 7:  7 G FALSE
 8:  8 H FALSE
 9:  9 I FALSE
10: 10 J  TRUE

当我尝试根据逻辑值进行子集化时,出现此错误

> dt[z == TRUE, x]
Error in setDT(list(indices = rep.int(indices__, len__), irows = irows)) : 
  object 'CexpandAltRep' not found

根据我之前的经验,以及我在小插图中看到的情况,情况不应该如此。这似乎仅在基于逻辑值进行子集化时出现。在对字符值“TRUE”进行子集化时,我也会得到奇怪的值。以下是其他一些正常工作或返回奇怪值的实例

> # Expected
> dt[y == E, x]
Error in eval(stub[[3L]], x, enclos) : object 'E' not found
> 
> # Expected
> dt[y == "E", x]
[1] 5
> 
> # Unexpected
> dt[z == "TRUE", x]
[1]  1  3  6 10
> 
> # Unexpected
> class(dt[z == "TRUE", x])
[1] "integer"

对可能发生的事情有什么想法吗?

编辑:

> sessionInfo()
R version 3.4.1 (2017-06-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] parallel  stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.11.4

loaded via a namespace (and not attached):
[1] compiler_3.4.1 tools_3.4.1  

【问题讨论】:

  • 请更新到开发版本,如果我没记错的话,有一个与 R 3.5.0 交互的错误,现在尚未在 CRAN 上处理
  • 您可以尝试将 x 写为 c(1, ..., 10) 或(也许)x = seq(1, 10, by = 1)
  • @MichaelChirico 是的,我在 R 3.5.0 中出现了很多问题,最初认为是这样。我现在使用的机器仍在运行 3.4.1。我没有预料到会有任何问题,但也许它已经到了太落后的地步。我不知道。另外,你为什么建议用不同的方式写 x?
  • @SeGa 这对我来说似乎有点不一致,但这是一个非常好的收获。例如,如果我使用dt[y == "A" &amp; x == 1, ],我将使用两个列名,但仍会返回一个 data.table。但你是对的,dt[y == "A" &amp; x == 1, x] 最终返回一个整数。不幸的是,我不能说更多,因为我仍在等待我们的管理员为我更新 R。不过,这很奇怪
  • ALTREP 错误表明问题来自 3.5.0,除非您安装的是 R 的开发版本

标签: r data.table subset


【解决方案1】:

感谢大家的帮助。我认为在 cmets 中有一个非常好的讨论,所以我不想删除这个问题。该问题已通过更新到最新版本的 R 得到解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2020-03-30
    • 2017-02-19
    • 2015-07-14
    相关资源
    最近更新 更多