【问题标题】:R data.table setkey with numeric columnR data.table setkey与数字列
【发布时间】:2012-08-07 21:35:13
【问题描述】:

我在 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

谢谢!

【问题讨论】:

  • 我无法在我的机器上复制此错误。你能放置一个复制问题的数据子集吗?

标签: r data.table


【解决方案1】:

作为 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 会话? helppackageVersion 等报告磁盘上包的版本,而不是加载到内存中的版本,afaik。加载 data.table 时的启动横幅会告诉您正在运行的版本。

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

【讨论】:

  • 从今天开始,一切正常!我确实重新加载了包,但也打开了多个 R 会话,所以我猜这是问题所在。很高兴这相对容易解决......谢谢,抱歉我没有等一天才发帖。
猜你喜欢
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 2016-10-04
  • 2023-03-22
  • 2013-04-27
  • 1970-01-01
  • 2014-01-10
  • 2018-08-07
相关资源
最近更新 更多