.rds文件内部格式

问题描述

由于设备(我们称其为卷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代码或手动接一个数字更简单的方法

解决方法

R internals包含序列化格式的文档。除非有人在邮件列表上发布了更详细的描述,否则这可能是我们所能做到的最好的。但是(乍一看)这似乎是一个相当全面的描述(与实现一起使用时肯定是这样)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...