我正在使用 R 版本 3.3.3(尽管我已经在 3.4.0 上复制了这个问题)并且data.table
Cygwin 上的版本 1.10.4。 (Edit:下面的评论表明这可能是 Cygwin 特有的。)我需要通过字母数字 ID 列合并两个数据表(大约 1 兆字节和 2000 行)。大约四分之三的情况是,我在合并调用本身或稍后修改或打印合并表的调用中遇到段错误。 (我理解这是惰性评估的结果。)
这对于字符列来说尤其是一个问题;合并整数列效果很好。查看此终端会话:
> library(data.table)
data.table 1.10.4 #[snipping rest of startup message]
> n <- 2e6 # Make this higher if you can't trigger a segfault yourself.
> a <- data.table(a=1:n, b=runif(n), c=runif(n))
> b <- data.table(a=1:n, x=runif(n), y=runif(n))
> head(merge(a, b)) # This works fine.
a b c x y
1: 1 0.6753597 0.08822928 0.7204507 0.71065772
2: 2 0.1898733 0.11883707 0.9820610 0.74329076
3: 3 0.3941039 0.57053921 0.3346781 0.22707652
4: 4 0.4564642 0.77429123 0.4924871 0.07743992
5: 5 0.9109421 0.79464586 0.2588091 0.82185820
6: 6 0.1805926 0.94213717 0.7426924 0.52522687
> a <- data.table(a=as.character(1:n), b=runif(n), c=runif(n))
> b <- data.table(a=as.character(1:n), x=runif(n), y=runif(n))
> head(merge(a, b))
*** caught segfault ***
address 0xffffffffffffffff, cause 'unknown'
Traceback:
1: `[.data.table`(x, i, , )
2: x[i, , ]
3: head.data.table(merge(a, b))
4: head(merge(a, b))
If a
and b
are data.frame
s, then merge()
字符列上不会出现段错误。问题:
- 这是有记录的还是众所周知的行为?
- 除了创建新的 ID 列或来回转换之外,是否有解决方法
data.frame
每当我需要使用merge()
?