我正在使用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.
我见过最近的 answer表明我需要至少拥有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
谢谢!
答案 0 :(得分:0)
Andrie和mnel,我也无法复制。
测试data.table
类型的安装:
test.data.table()
在我的上网本上,这将返回:
[.. snip ..]
All 717 tests in test.data.table() completed ok in 50.040sec
如果它准确地返回 717 那么你就是好的。对于1.8.2的NEWS的NOTES部分,您会发现1.8.2有717个测试。
是否有可能升级到1.8.2但是没有重新加载软件包,或者当你升级一个但没有重新加载其他R会话时运行了多个R会话? help
,packageVersion
等报告磁盘上的软件包版本,而不是加载到内存中的版本,afaik。当data.table加载时,它是启动横幅,告诉您版本正在运行。
我不知道R是否存储了加载到内存中的软件包的版本。如果没有,那么建议r-devel是好的,并且更改packageVersion
和hep(package=)
以检查内存中的版本(如果已加载)与磁盘上的版本匹配。