r - 从 .RData 文件加载前 N 行

标签 r dataframe datatable rdata

我四处搜索,但找不到问题的答案。 scan(base 包)和fread(data.table 包)等函数在读取方面做得很好只是用户指定的 .txt 或 .csv 的前 N ​​行。但是,当涉及到 .RData 时,load 会加载整个文件,并且无法指定应从中读取多少个值。

我有超过 3GB 大小的 .RData 文件,每个文件包含一个 data.framedata.table,并不总是需要加载整个文件,但只是对象的前 100 或 1,000 行。有办法做到这一点吗?

最佳答案

我的猜测是没有现成的解决方案。

如果我们查看一个样本、ASCII 编码的、未压缩的 RDS 文件,我们会看到它以列主顺序存储:

saveRDS(mtcars[1:5, 1:2], "testrds.rds", ascii = TRUE, compress = FALSE)

生成此文件(带有我插入的注释)

A        ## ASCII file
3        ## some version info and ??
262146
197888
6
CP1252
787
2
14
5       ## This seems to indicate 5 items in this vector (column)
21      ## first column starts here (but how would you know?)
21
22.8
21.4
18.7    ## first column ends here
14
5       ## Again, This seems to indicate 5 items in this vector (column)
6       ## second column starts here
6
4
6
8       ## second column ends here
1026
1
262153    # Attributes start here: names, row.names, class 
5
names                ## col names
16
2
262153
3
mpg                  ### first col name
262153
3
cyl                  ### second col name
1026
1
262153
9
row.names            ## 2nd attribute: row.names 
16
5
262153
9
Mazda\040RX4         ### first row name
262153
13
Mazda\040RX4\040Wag  ### second row name
262153
10
Datsun\040710        ### ...
262153
14
Hornet\0404\040Drive
262153
17
Hornet\040Sportabout ### last row name
1026
1
262153
5
class                ## 3rd attribute: class
16
1
262153
10
data.frame           ### value of class
254

正如您在这个简单的 RDS 文件中看到的那样,读取前几行数据仍然需要解析整个文件,并且需要知道要跳过哪些行。而且您需要比 R Internals 中更多的 RDS 文件文档。文档。

基于这个简单的例子,人们可能会做出一些猜测并得到一个粗略的函数草案,该函数适用于你知道是数据帧的 RDS 文件,但它需要一些工作——如果你想的话,还需要更多的工作确保它足够强大以处理更复杂的数据帧(例如,使用 factorDate 列)。如果您有 RData 文件,它们将具有类似但稍微复杂的格式,因为它们可以处理多个对象。

总而言之,我认为 RDS 和 RData 对于您可能想要部分加载的数据来说是糟糕的选择。你最好使用 CSV 或 TSV,然后你可以使用你在问题中提到的标准选项(或 vroom::vroom)仅将你想要的数据加载到内存中。

关于r - 从 .RData 文件加载前 N 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63920407/

相关文章:

r - 查找两个向量之间的序列[间隙或差异]

r - 检查唯一值并在 R data.table 中只有一个唯一值时返回它的最快方法

r - 将Excel值从列存储到bert中的变量

python - 进行多条件求和的循环

python - 标记数据框的行

C# 在 Deedle Frame 和 DataTable 之间转换

r - 如何对R中的数据帧执行求和和计数

R数据框的聚合列表

c# - 无法将数据列从一个数据表复制到另一个数据表

php - DataTables 分页和搜索不起作用