Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:如何将300 1GB.rds文件合并成一个大的rds文件,而不将它们读入内存?_R - Fatal编程技术网

R:如何将300 1GB.rds文件合并成一个大的rds文件,而不将它们读入内存?

R:如何将300 1GB.rds文件合并成一个大的rds文件,而不将它们读入内存?,r,R,我有300+个.rds文件,每个文件都有相同的列名,我想将它们绑定到一个压缩的.rds文件中,我可以通过sftp传输 有没有一种方法可以在不将它们读入内存的情况下有效地执行此操作 目前,我正在使用以下代码,但这会在写入文件之前耗尽内存。任何想法都非常感谢 library(tidyverse) library(data.table) df <- list.files(pattern = ".rds") %>% map(readRDS) %>

我有300+个.rds文件,每个文件都有相同的列名,我想将它们绑定到一个压缩的.rds文件中,我可以通过sftp传输

有没有一种方法可以在不将它们读入内存的情况下有效地执行此操作

目前,我正在使用以下代码,但这会在写入文件之前耗尽内存。任何想法都非常感谢

library(tidyverse)
library(data.table)

df <- list.files(pattern = ".rds") %>%
         map(readRDS) %>% 
         data.table::rbindlist()

    saveRDS(df,"df.rds")
库(tidyverse)
库(数据表)
df%
地图(读取数据)%>%
data.table::rbindlist()
saveRDS(df,“df.rds”)

最后我一个接一个地读,并使用
read::write_csv(“name.csv”,append=TRUE)
将它们附加到磁盘上。之后,我使用{disk.frame}或SQL数据库来处理数据。

正如其他人所评论的,附加/合并
.rds
文件可能是不可能的(或至少是非常困难的)。但是,如果它们是简单的列,那么将它们转换为
.csv
应该会有问题。在这种情况下,可以附加它们,假设(如您所说)它们具有匹配的列名

此代码段读取
.rds
文件名列表,并将其数据附加到
.csv
中。我几乎没有R方面的经验,因此我不确定如何管理底层资源,但原则上,这种方法应该允许您一次只读取一个文件,从而在构建~300GB
.csv
时将内存消耗保持在~1GB


文件名如果最终目的是传输数据,请在sql server中读取和写入数据

您可以将.rds转换为.csv,并使用HeidiSQL快速导入到以csv为结构的表中


然后在另一端,您可以从SQL读取数据并再次将其转换为.rds,或者只发送.csv。

好的,您不能将数据附加到rds文件中。该文件格式适用于任意R对象。对于表格数据,仅添加是合理的。如果您使用未压缩的RDS,您可能可以使用低级函数来破解某些东西,但这将是一项巨大的工作。购买/租用更多RAM更便宜。就我个人而言,我使用CSV并在传输之前简单地压缩它。即使您以某种方式管理它,您认为如何打开这个巨大的(300GB)文件?您提到您使用
disk.frame
,它将比内存文件更大的文件拆分成更小的文件。你为什么不直接压缩disk.frame文件夹而不是创建一个.rds?@MadsBoyd-Madsen你能添加更多细节吗?我不熟悉流媒体
rds
文件。关于如何做,你有什么参考资料吗?