解析问题,加载文件夹时出现意外字符

Parsing issue, unexpected character when loading a folder

我正在使用 this answer 加载到 Excel 文件夹:

# Get the list of files
#----------------------------#
  folder <- "path/to/files"
  fileList <- dir(folder, recursive=TRUE)  # grep through these, if you are not loading them all

  # use platform appropriate separator
  files <- paste(folder, fileList, sep=.Platform$file.sep)

到目前为止,还不错。

# Load them in
#----------------------------#
  # Method 1:
  invisible(sapply(files, source, local=TRUE))

  #-- OR --#

  # Method 2:
  sapply(files, function(f) eval(parse(text=f)))

但是源函数(方法一)给我报错:

Error in source("C:/Users/Username/filename.xlsx") : 
  C:/Users/filename :1:3: unexpected input
1: PK
      ^

对于方法 2 得到错误:

Error in parse(text = f) : <text>:1:3: unexpected '/'
1: C:/
      ^

编辑:我试图通过将工作目录设置为文件夹的目录来规避这个问题,但这没有帮助。

知道为什么会这样吗?

编辑 2:执行以下操作时有效:

setwd("...")
library(readxl)
file.list <- list.files(pattern='*.xlsx')
df.list <- lapply(file.list, read_excel)

只是为了在评论部分之外提供一个正确的答案...

  • 如果您的目标是读取许多 Excel 个文件,则不应使用 source
  • source专用于运行外部R代码。
  • 如果您需要读取许多 Excel 文件,您可以使用以下代码和这些库之一的支持:readxlopenxlsxtidyxlunpivotr).
filelist <- dir(folder, recursive = TRUE, full.names = TRUE, pattern = ".xlsx$|.xls$", ignore.case = TRUE) 
l_df <- lapply(filelist, readxl::read_excel)

请注意,我们使用 dir 列出所有以 .xlsx.xls 结尾的文件的完整路径 (full.names = TRUE) (pattern = ".xlsx$|.xls$"), .XLSX, .XLS (ignore.case = TRUE) 在文件夹 folder 及其所有子文件夹 (recursive = TRUE).


readxltidyverse 集成。它非常容易使用。这很可能是您要找的。

就个人而言,如果您需要编写(而不是读取)具有许多特定功能的自定义 Excel 文件,我建议使用 openxlsx

tidyxl 是我见过的最好的读取 Excel 文件的软件包,但使用起来可能相当复杂。但是,它在类型保存方面非常小心。 在 unpivotr 的支持下,它允许您处理复杂的 Excel 结构。 例如,当您找到多个 headers 和多个左索引列时。