解析问题,加载文件夹时出现意外字符
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 文件,您可以使用以下代码和这些库之一的支持:
readxl
、openxlsx
、tidyxl
( unpivotr
).
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
).
readxl
与 tidyverse
集成。它非常容易使用。这很可能是您要找的。
就个人而言,如果您需要编写(而不是读取)具有许多特定功能的自定义 Excel 文件,我建议使用 openxlsx
。
tidyxl
是我见过的最好的读取 Excel 文件的软件包,但使用起来可能相当复杂。但是,它在类型保存方面非常小心。
在 unpivotr
的支持下,它允许您处理复杂的 Excel 结构。
例如,当您找到多个 headers 和多个左索引列时。
我正在使用 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 文件,您可以使用以下代码和这些库之一的支持:
readxl
、openxlsx
、tidyxl
(unpivotr
).
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
).
readxl
与 tidyverse
集成。它非常容易使用。这很可能是您要找的。
就个人而言,如果您需要编写(而不是读取)具有许多特定功能的自定义 Excel 文件,我建议使用 openxlsx
。
tidyxl
是我见过的最好的读取 Excel 文件的软件包,但使用起来可能相当复杂。但是,它在类型保存方面非常小心。
在 unpivotr
的支持下,它允许您处理复杂的 Excel 结构。
例如,当您找到多个 headers 和多个左索引列时。