使用as.data.table,获取错误“无法将类““ integer64””强制到data.frame”

时间:2019-04-07 16:40:42

标签: r data.table sp

我有一列包裹识别码,data.table::fread读取为integer64。几个月前它抛出了错误,所以我开始转换为角色,但是在停止抛出错误之后,我认为保持原样没有任何不利之处。但是在使用包sp进行了一些处理之后,我试图使用x <- as.data.table(x)从SpatialPointsDataFrame还原回data.table并得到:

Error in as.data.frame.default(x[[i]], optional = TRUE) : 
  cannot coerce class ""integer64"" to a data.frame

以性格读物是共识推荐here。但是我试图了解正在发生的事情。他们本来可以是数字而不是ID。似乎sp::coordinates能够将data.table中的integer64数字输入到其自己的数据帧类型中,但是从那里开始是一条单向街道?

编辑:我打算做@MichaelChirico在评论中建议的traceback()等,意识到R在错误消息后挂了,决定尝试一个小样本。令我惊讶的是,它没有任何错误/警告。到目前为止,我添加了空间数据并转换回去的最大单表大约有225万行。我一直在增加样本量,以查看它将在哪里破裂。最终结果是(对我来说)暮光区-如果我将行随机化,则能够转换整个SPDF,否则就可以! https://imgur.com/aghsdDA这不是一个“解决方案”,所以我要把这个留给一个知道幕后情况的人。

EDIT_2:用链接替换了先前编辑中的嵌入式插图图像。指向12MB SPDF文件的链接为here。感兴趣的变量是integer64'Prop'-参见上文;尝试从SPDF恢复为data.table。在Mac 10.10.5上可重现,在R v3.3.3上运行Rstudio v1.1.453,将data.table v1.10.4-3和sp v1.3-1打包。在下面用您的下载位置替换PATH_TO_FILE:

x <- readRDS("PATH_TO_FILE/x_SPDF.rds")

z <- x[sample(nrow(x), 2535323),] # all rows but randomized
z <- as.data.table(z) # works
x1 <- x[1:2535322, ] # un-randomized subset w/ nrow() minus 1
x1 <- as.data.table(x1) # works
x <- as.data.table(x) # stops with error noted in initial question

使用旧的Mac旧键盘可能与它有关,但是我认为,如果它适用于任意大小的子集和随机子集,则应该可以正常使用。

0 个答案:

没有答案