r - 将数据框保存为二进制文件

标签 r

我想保存一大堆相对较大的数据帧,同时最大限度地减少文件占用的空间。打开文件时,我需要能够控制它们在工作区中的名称。

基本上我正在寻找 dput 和 dget 的语义,但使用二进制文件。

例子:

n<-10000

for(i in 1:100){
    dat<-data.frame(a=rep(c("Item 1","Item 2"),n/2),b=rnorm(n),
        c=rnorm(n),d=rnorm(n),e=rnorm(n))
    dput(dat,paste("data",i,sep=""))
}


##much later


##extract 3 random data sets and bind them
for(i in 1:10){
    nums<-sample(1:100,3)
    comb<-rbind(dget(paste("data",nums[1],sep="")),
            dget(paste("data",nums[2],sep="")),
            dget(paste("data",nums[3],sep="")))
    ##do stuff here
}

最佳答案

最好的办法是使用 rda 文件。您可以使用 save()load()写入和读取命令:

set.seed(101)
a = data.frame(x1=runif(10), x2=runif(10), x3=runif(10))

save(a, file="test.rda")
load("test.rda")

编辑:为了完整起见,只是为了涵盖 Harlan 的建议可能是什么样子(即包装 load 命令以返回数据帧):
loadx <- function(x, file) {
  load(file)
  return(x)
}  

loadx(a, "test.rda")

或者,查看 hdf5、RNetCDF 和 ncdf 包。我已经尝试过 hdf5 package在过去;这使用 the NCSA HDF5 library .这很简单:
hdf5save(fileout, ...)
hdf5load(file, load = TRUE, verbosity = 0, tidy = FALSE)

最后一个选项是使用二进制文件连接,但这在您的情况下效果不佳,因为 readBin 和 writeBin 仅支持向量:

这是一个简单的例子。首先用“w”写入一些数据并将“b”附加到连接中:
zz <- file("testbin", "wb")
writeBin(1:10, zz)
close(zz)

然后用“r”读取数据并将“b”附加到连接中:
zz <- file("testbin", "rb")
readBin(zz, integer(), 4)
close(zz)

关于r - 将数据框保存为二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1635278/

相关文章:

r - 我运行 knit-minimal.lyx 得到 "LaTeX Error: File ` 图/最小无聊图 1' not found."

r - 需要重组数据

r - 如何使用 list.files 按正确的每月顺序导入数据

r - 抓取此网页的正确 xpath 是什么?

r - 在 data.table 中通过指示变量列中表示的 'group' 进行聚合的好方法吗?

r - 如何传递 R 函数参数以从 df 中选择行

r - 优化:将数据帧拆分为数据帧列表,每行转换数据

r - 在页面上布置多个 ggplot 图

r - 循环计算权重并创建新变量

r - 如何在 R 中创建树形图