5

我只是偶然发现了 data.table 中的一些奇怪行为。简而言之,使用 ":=" 更改(替换)data.table 中列的值似乎也更改了另一个 data.table 中的值(这是 := 操作之前的原始 data.table 的副本)。示例代码如下。

我是否遗漏了其他优秀软件包的基本知识,还是应该有错误报告?

子问题: ifelse() 是更改值的最佳方法,如下所示(在一个相当大的表中,约 10m 行)?它按预期完成工作,速度足够快(几秒钟),但带有详细信息 = TRUE data.table 抱怨(“第 1 项的 RHS 已重复。命名向量或回收列表 RHS。)我无法到目前为止解密消息:)

library(data.table)
options(datatable.verbose=TRUE)
DT1 <- data.table(f=as.integer(c(1,2,1,1,1,2,1)))
DT2 <- DT1

tables()

DT1
DT2
identical(DT1, DT2) # OK, they should be identical.

# I am not sure ifelse() is the best way to do this, but it does what I want, even though data.table complains
DT1[, f := as.character(ifelse(f==1,"a","b"))]

tables()
DT1
DT2
identical(DT1, DT2) # Not OK -- why did DT2 change?

如果相关,我的系统是:

R version 2.15.3 (2013-03-01) -- "Security Blanket"
Platform: x86_64-w64-mingw32/x64 (64-bit)
data.table 1.8.8
All 943 tests in test.data.table() completed ok in 27.869sec

谢谢。

4

0 回答 0