将detectDates = TRUE传递给lapply

时间:2017-07-20 13:13:37

标签: r excel date lapply

我正在处理大量不同的文件,因此我想通过循环读取它们。它适用于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)
之前有过工作的

,它返回了同样的错误(无效&#39;描述&#39;参数)。几个小时后,在我关闭并重新启动RStudio之后,它又恢复了工作。当我尝试使用detectDates = TRUE参数时,该过程会自行重复,现在循环既不工作也不工作。 我已经在一些在线讨论中读到XLConnect有时会帮助这样的事情,但不幸的是我无法加载它(它需要rJava,当我尝试加载它时会返回错误,即使我安装了它成功)。

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

1 个答案:

答案 0 :(得分:0)

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

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

我相信您实际上是将detectDates = TRUE作为参数传递给lapply而不是read.xlsx。您可以按如下方式重新调用您的电话:

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