由于设备(我们称之为第 1 卷)被填满,我丢失了一个 .rds 文件。通常当这种情况发生时,R 会抛出一个错误并停止。在那种情况下,我在另一个卷(第 2 卷)上有一个安全副本。然而,这一次,R 将文件写入第 1 卷而没有错误并将其复制到第 2 卷。现在无法使用 readRDS 打开文件,并出现错误“从连接读取错误”。
该文件包含一个 data.table,未压缩存储,infoRDS 可以读取元数据:
> infoRDS('corrupt.rds')
$version
[1] 3
$writer_version
[1] "3.6.3"
$min_reader_version
[1] "3.5.0"
$format
[1] "xdr"
$native_encoding
[1] "UTF-8"
此外,hexView::readRaw 可以读取文件并显示数据表的列名。
使用
readRaw('corrupt.rds', endian = 'big', human = 'real', width = 8, offset = 5)
我可以看到许多我需要恢复的数字。但是,这似乎是一种非常乏味的方法,因为我不了解 .rds 文件的内部格式。
我还研究了我不明白如何使用的 xmlDeserializeHook。当然,readRDS unserializeFromConn使用的 C 代码包含所用结构的所有信息,但更高级别的文档会有所帮助。
有没有比深入研究该 C 代码或手动逐个获取数字更简单的方法?