【问题标题】:small files in R use of RAMR中的小文件使用RAM
【发布时间】:2017-05-24 12:26:27
【问题描述】:

我正在尝试在 R 中打开一个 163MB 的 .xlsx 文件。

library(openxlsx)
df <- read.xlsx(xlsxFile = "df.xlsx", sheet = 1, colNames = T)

这个小文件(相对较小)使用了我笔记本电脑上的所有 8GB RAM。 我有这个文件的 CSV 版本,但由于在其中一个列中使用了 ,;,因此不能使用 CSV 选项,知道我最近加载了一个 kaggle 文件(0.5GB csv) 进入 R 并且仍然使用我的笔记本电脑浏览互联网? 编辑:pryr::object_size(df)的RAM使用+输出

【问题讨论】:

  • pryr::object_size(df) 的结果是什么(可能需要install.packages("pryr"))?
  • 有两个可能的原因 1. 转换为 R 数据类型时,某些字段可能占用比原始文件更多的空间(或在某些情况下更少) 2. xlsx 文件被压缩,因此扩展加载时的预期行为
  • 当您说您有 CSV 版本但“CSV 不是一个选项”时,这是否意味着您的 CSV 格式不正确?在文件中使用逗号和分号是完全合法的,如果格式正确,R 会很好地读取它。 (也许您可以从 xlsx 重新导出为 csv,如果您的版本格式不正确并且您在读取 ​​xlsx 时仍然遇到问题。)
  • 感谢您的建议。 @Phil 我更新了帖子,使其包含 RAM 使用情况的图片和pryr::object_size(df)的输出@
  • @Richard 我不确定看到 Phil 建议的函数的输出我猜可能还有其他原因

标签: r csv ram xlsx


【解决方案1】:

你试过 readxl 包https://blog.rstudio.org/2017/04/19/readxl-1-0-0/

read_xlsx(path, sheet = NULL, range = NULL, col_names = TRUE,
col_types = NULL, na = "", trim_ws = TRUE, skip = 0, n_max = Inf,
guess_max = min(1000, n_max))

【讨论】:

    【解决方案2】:

    您也可以将其读取为制表符分隔 (read.csv(..., sep="\t")) 或将其保存为 .txt 文件并以制表符分隔读取。

    【讨论】:

      【解决方案3】:

      看起来这是(或至少是)openxlsx 的问题。这个 Github issue 描述了文件大小膨胀的问题并提出了解决方案(使用开发版本):https://github.com/awalker89/openxlsx/issues/161

      因此,潜在的解决方案:

      • 试试openxlsx的开发版(devtools::install_github("awalker89/openxlsx")
      • 按照@Ajay Ohri 的建议,尝试使用readxl 包。
      • 加载文件并将其保存为带有save()saveRDS() 的二进制R 文件
      • 使用.csv 文件重试readr::read_csv()data.table::fread();两者都比基本 R 的 read.csv()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-13
        • 1970-01-01
        相关资源
        最近更新 更多