R:如何从RDS文件中读取选定的列?

标签 r rds

如何从非常大的文件中读取部分数据?

示例数据生成为:

set.seed(123)
df <- data.frame(replicate(10, sample(0:2000, 15 * 10^5, rep = TRUE)),
                 replicate(10, stringi::stri_rand_strings(1000, 5)))
head(df)
#     X1   X2   X3   X4   X5   X6   X7   X8   X9  X10  X1.1  X2.1  X3.1  X4.1  X5.1  X6.1  X7.1  X8.1  X9.1 X10.1
# 1  575 1843 1854  883  592 1362 1075  210 1526 1365 Qk8NP Xvw9z OYRa1 8BGIV bejiv CCoIE XDKJN HR7zc 2kKNY 1I5h8
# 2 1577  390 1861  912  277  636  758 1461 1978 1865 ZaHFl QLsli E7lbs YGq8u DgUAW c6JQ0 RAZFn Sc0Zt mif8I 3Ys6U
# 3  818 1076  147 1221  257 1115  759 1959 1088 1292 jM5Uw ctM3y 0HiXR hjOHK BZDOP ULQWm Ei8qS BVneZ rkKNL 728gf
# 4 1766  884 1331 1144 1260  768 1620 1231 1428 1193 r4ZCI eCymC 19SwO Ht1O0 repPw YdlSW NRgfL RX4ta iAtVn Hzm0q
# 5 1881 1851 1324 1930 1584 1318  940 1796  830   15 w8d1B qK1b0 CeB8u SlNll DxndB vaufY ZtlEM tDa0o SEMUX V7tLQ
# 6   91  264 1563  414  914 1507 1935 1970  287  409 gsY1u FxIgu 2XqS4 8kreA ymngX h0hkK reIsn tKgQY ssR7g W3v6c

saveRDS 用于保存文件。

saveRDS(df, 'df.rds')

使用以下命令查看文件大小:

file.info('df.rds')$size
# [1] 29935125
utils:::format.object_size(29935125, "auto")
# [1] "28.5 Mb"

使用以下函数读取保存的文件。

readRDS('df.rds')

但是,我的一些文件大小为 GB,并且只需要几列即可进行某些处理。是否可以从 RDS 文件中读取选定的列?

注意:我已经有了经过大量处理后生成的 RDS 文件。现在,我想知道从现有 RDS 文件中读取所选列的最佳方法。

最佳答案

我认为您不能只读取 rdsrda 文件的一部分。

另一种方法是使用 feather 。举个例子,使用我正在使用的大羽毛:

library(feather)
file.info("../feathers/C1.feather")["size"]
#                              size
#  ../feathers/C1.feather 498782328

system.time( c1whole <- read_feather("../feathers/C1.feather") )
#     user  system elapsed
#    0.860   0.856   5.540
system.time( c1dyn <- feather("../feathers/C1.feather") )
#     user  system elapsed
#        0       0       0

ls.objects()
#             Type      Size PrettySize          Dim
#  c1dyn   feather      3232     3.2 Kb 2886147 x 36
#  c1whole  tbl_df 554158688   528.5 Mb 2886147 x 36

您可以将这两个变量作为完整的 data.frames 进行 react :尽管 c1whole 已经在内存中(因此可能会快一点),但访问 c1dyn 仍然相当快.

注意:某些函数(例如,dplyr 中的几个函数)无法像在 data.frame 上那样在 feather 上运行>tbl_df。如果您的目的只是挑选特定的列,那么就没问题。

关于R:如何从RDS文件中读取选定的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47293904/

相关文章:

RStudio、Packrat 和 Knir

r - CMD检查错误

r - 如何根据文件的编号移动某些文件?

r - 在ubuntu中安装R

postgresql - AWS PostgreSQL RDS : more than 10GB increase in Freeable Storage Space without any data removed

r - 使用 dplyr 选择列

c# - .NET CORE MySql MaxPoolSize 未应用于

java - Flyway 经常挂起(MariaDB 连接器、RDS)

amazon-web-services - 如何将RDS快照恢复到cloudformation中?

mysql - 刷新和锁定 RDS Mysql 数据库中的表所需的权限