1

我在 R 中使用 data.table 包。尝试在数字列上使用 setkey 时,我收到以下错误消息:

setkey(candidate.SNPs.MAF, p)

Error in setkeyv(x, cols, verbose = verbose) :
Column 'p' cannot be coerced to integer without losing fractional data.

我看到最近的回答表明我需要至少 v1.8.1 并确认使用最新版本 (1.8.2) 时会出现此问题

help(package="data.table")
               Information on package 'data.table'

Description:
Package:            data.table
Version:            1.8.2

有什么建议么?我宁愿不必恢复到 data.frames。

我的数据结构如下所示:

str(can_SNPs_context)
Classes 'data.table' and 'data.frame':  1031 obs. of  23 variables:
$ Trait            : chr  "GH2_SLA" "GH2_SLA" "GH2_SLA" "GH2_SLA" ...
$ Locus            : chr  "1" "1" "1" "1" ...
$ Marker           : int  1825530 1844004 2251065 2444826 2832616 3557976 4299 650 4606939 4610965 6057450 ...
$ p                : num  8.68e-08 7.21e-08 1.11e-07 1.20e-08 8.17e-08 ...

p 列是我试图设置为键的列 - 非常小的值会导致问题吗?

R 版本 2.15.1 Linux x86_64

谢谢!

4

1 回答 1

1

作为 Andrie 和 mnel,我也无法复制。

要测试您的安装data.table类型:

test.data.table()

在我的上网本上返回:

[.. snip ..]
All 717 tests in test.data.table() completed ok in 50.040sec

如果它准确地返回717那么你很好。NEWS for 1.8.2的 NOTES 部分是您发现 1.8.2 有 717 个测试的地方。

您是否有可能升级到 1.8.2 但没有重新加载软件包,或者当您升级一个但没有重新加载其他会话时运行了多个 R 会话? helppackageVersion报告磁盘上包的版本,而不是加载到内存中的版本,afaik。它是 data.table 加载时的启动横幅,它告诉您正在运行的版本。

我不知道 R 是否存储加载到内存中的包的版本。如果没有,最好建议 r-devel,更改packageVersionhep(package=)检查内存中的版本(如果已加载)与磁盘上的版本是否匹配。

于 2012-08-08T06:53:36.627 回答