我正在处理大量不同的文件,因此我想通过循环读取它们。它适用于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需要很长时间。有没有人以前遇到过这个或知道解决方案?
答案 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))