【问题标题】:Passing detectDates=TRUE to read.xlsx in lapply在 lapply 中将 detectDates=TRUE 传递给 read.xlsx
【发布时间】:2017-12-26 05:13:32
【问题描述】:

我正在处理大量不同的文件,所以我想循环读取它们。它适用于 csv 文件,但我在读取 xlsx 文件时遇到了问题。

library(openxlsx)
allFiles <- list.files("path", full.names = T) 
allFiles <- lapply(allFiles, read.xlsx)

我的数据集中的一列包含日期,当我运行上面的代码时,这些日期被自动转换为一组奇怪的数字。 (除此之外,一切正常。)所以我尝试将另一个参数传递给函数:

allFiles <- list.files("path", full.names = T) 
allFiles <- lapply(allFiles, read.xlsx, detectDates = TRUE)

这返回了一条错误消息:

Error in file(description = xlsxFile) : invalid 'description' argument

但当我在单个文件上尝试时效果很好:

read.xlsx("path", detectDates = TRUE)

此外,奇怪的是,当我删除参数并尝试运行时

allFiles <- list.files("path", full.names = T) 
allFiles <- lapply(allFiles, read.xlsx)

以前工作过,它返回相同的错误(无效的“描述”参数)。几个小时后,在我关闭并重新启动 RStudio 后,它又可以工作了。当我尝试使用 detectDates = TRUE 参数时,该过程会自行重复,现在循环在有或没有它的情况下都不起作用。 我在一些在线讨论中读到 XLConnect 有时可以帮助解决此类问题,但不幸的是我无法加载它(它需要 rJava,即使我成功安装它,当我尝试加载它时它也会返回错误)。

单独读取每个文件或转换为 csv 需要很长时间。有没有人遇到过这种情况或知道解决方案?

【问题讨论】:

    标签: r excel date lapply


    【解决方案1】:

    在以下对lapply()的调用中:

    allFiles <- lapply(allFiles, read.xlsx, detectDates = TRUE)
    

    我相信您实际上将detectDates = TRUE 作为参数传递给lapply,而不是read.xlsx。你可以改写你的电话如下:

    allFiles <- lapply(allFiles, function(x) read.xlsx(x, detectDates = TRUE))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-12
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多