繁体   English   中英

使用 list.files(pattern =) 从向量 R 导入文件

[英]using list.files(pattern =) to import files from a vector, R

使用 R,我正在尝试借助由脚本中的其他函数更新的数值向量将文件列表导入 RStudio 中的环境,但 list.files() 中指定的模式参数被部分忽略。 我有

test_list <- list.files(
                    path='~/somepath/'
                    , pattern = paste0(threshold_list, "\\.csv$")
                    , recursive = TRUE
                    , full.names = TRUE)

其中 threshold_list 是由引用特定 csv 文件的整数组成的向量,

[1]   1   2   3   4   5   6   7   8   9  10 ...

所以,如果我要打印“paste0(threshold_list, "\\.csv$")”,我会得到我想要的文件名:

"\\1.csv$"   "\\2.csv$"   "\\3.csv$"   "\\4.csv$" ... "\\150.csv$"

但是,如果我将此向量传递给 list.files() 中的模式参数,然后执行脚本,我将以 10 为间隔获取文件,这不是我需要的;

 [1] ".../somepath/001.csv"
 [2] ".../somepath/011.csv"
 [3] ".../somepath/021.csv"
 [4] ".../somepath/031.csv"
 ...
 [n] ".../somepath/141.csv"

如果向量中的第一个分量是例如 34,则第一个文件将是“034.csv”,并且会出现相同的模式。 当 list.files(pattern="*.csv") 目录中的所有文件都导入到环境中时,所以我假设问题出在模式参数中的正则表达式。 我希望列表包含“paste0(threshold_list, "\\.csv$")" 指定的每个文件名,我该如何实现?

编辑 1:文件名实际上是 001.csv、002.csv 等,转换向量,使其所有组件都是三位数字,

sprintf("%03d", threshold_list)

并应用下面给出的答案,实现了解决方案。

您不在正则表达式模式中使用通配符,您应该在方括号中使用 class 枚举

test_list <- list.files(path='~/somepath/', pattern = sprintf('%s\\.csv$', paste(threshold_list, sep='', collapse='|')), recursive = TRUE, full.names = TRUE)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM