【发布时间】:2012-06-12 20:15:59
【问题描述】:
我在 R 中有一个相当基本的 data.table,有 250k 行和 90 列。我正在尝试将data.table 键入character 类的列之一。当我打电话时:
setkey(my.dt,my.column)
我收到以下神秘的错误消息:
"Error in setkeyv(x, cols, verbose=verbose) :
reorder received irregular lengthed list"
我找到了source-code commit with this message,但无法完全理解它的含义。我的键列不包含 NA 或空白值,看起来非常合理(它包含股票代码),并且在默认的 order() 命令下表现良好。
更令人沮丧的是,以下代码正确完成:
first.dt <- my.dt[1:100000]
setkey(first.dt,my.column)
second.dt <- my.dt[100001:nrow(my.dt]
setkey(second.dt,my.column)
我不知道这里会发生什么。有什么建议吗?
编辑 1:我已经确认键中的每个值都符合相当标准的格式:
> length(grep("[A-Z]{3,4}\\.[A-Z]{2}",my.dt$my.column)) == nrow(my.dt)
[1] TRUE
编辑 2:我的系统信息如下(请注意,我实际上使用的是 Windows 7)。我正在使用 data.table 1.8 版。
> Sys.info()
sysname release version nodename machine login
"Windows" "Server 2008 x64" "build 7600" "WIN-9RH28AH0CKG" "x86-64" "Administrator"
user effective_user
"Administrator" "Administrator"
【问题讨论】:
-
您是否尝试将您的列转换为
factor? -
刚试了一下,转换很顺利,但我仍然收到同样的错误。
-
好的。您能否提供 data.table 的前 10 行?
-
如前所述,前 10 行键很好。前 100000 行键很好。其他 150000 行关键罚款。不知何故,整个事情都失败了。关键列的前 10 行如下,我找不到任何不符合此格式的行:
"CFP.TO" "MCP.AX" "NEC.OL" "LND.PS" "MYRS.KL" "RHBC.KL" "BGRO.KL" "PBT.AX" "MEG.PS" "NOVN.VX" -
以前没见过这个。当您提取前 100000 行(或其他)时,您正在制作一个新对象。因此,不知何故,原作中可能有某些东西被破坏了。请需要
.Internal(inspect(my.dt))的输出。
标签: r data.table