【问题标题】:How to save large output sufficiently fast in text or any other format?如何以文本或任何其他格式足够快地保存大输出?
【发布时间】:2016-08-18 18:31:58
【问题描述】:

我的问题是:如何保存输出,即mydata

 mydata=array(sample(100),dim=c(2,100,4000))

相当快?

我按照here 的建议使用了reshape2 包。

 melt(mydata)

 write.table(mydata,file="data_1")

但是将数据保存到文件中需要一个多小时。我正在寻找其他更快的方法来完成这项工作。

【问题讨论】:

  • saveRDSreadRDS 可能是保存和加载 R 对象的最快方式。
  • readr::write_delim(mydata, path="data_1")
  • 我自己还没有消化,但您可能会发现讨论 here 相关(今天发布)。
  • this SO question,比较feather、fwrite、saveRDS
  • @nrussell。这是我一直在寻找的,在两种方式(保存和阅读)方面都非常快。非常感谢。

标签: r


【解决方案1】:

我强烈建议参考这个great post,这肯定有助于明确有关文件保存的问题。

无论如何,saveRDS 可能最适合您。在这种情况下,更相关的区别在于,save 可以在一次调用中将许多对象保存到一个文件中,而 saveRDS 作为一个较低级别的函数,一次只能处理一个对象。

saveload 允许您将命名的 R 对象保存到文件或其他连接并再次恢复该对象。但是,加载时,命名对象将恢复到当前环境,并使用与保存时相同的名称。

saveRDSloadRDS 相反,允许将单个 R 对象保存到连接(通常是文件)并恢复对象,可能使用不同的名称。低级别的可操作性使RDS 函数更有效,可能适合您的情况。

【讨论】:

    【解决方案2】:

    使用 ?saveRDS 阅读 saveRDS 的帮助文本。这可能是您保存和加载大型数据帧的最佳方式。

    saveRDS(yourdata, file = "yourdata.Rda")
    

    【讨论】:

    • 别忘了设置选项compress = FALSE,否则会错过速度优势。
    • 感谢您的回答,尽管它在不使用 compress = FALSE 的情况下工作得很快。
    猜你喜欢
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 2011-02-12
    • 2020-08-27
    相关资源
    最近更新 更多