读取文件而不在 R 中提及其特定文件名

Reading a file without mentioning its specific file name in R

我在名为数据集的文件夹中有一些文件 (.tst)。这些文件的文件名相对较长(时间戳等),并在 运行ning 一些代码后自动命名。这意味着每次我 运行 代码时我想要读取的文件名都在改变。

有没有不用给出具体文件名就可以读取文件的方法?比如我的文件名是W.2021-10-15.12345678901.tst和M.2021-10-15.123456789.tst。我想用W.

读取文件

我尝试通过给出绝对路径来阅读它,例如

read.table(file = '/home/myname/project/datasets/W*.tsv', sep = '\t', header = TRUE)

但失败并报告“文件错误(文件,“rt”):无法打开连接”。请帮忙。谢谢。

也许更好的方法是读取目录中的所有文件名,找到匹配项,然后读取完整的名称。

tmp=list.files()
tmp=tmp[grep("^W",tmp)]
read.table(tmp,...)

你最好祈祷只有1场比赛。

# list all tsv files that start with "w"
filenames <- list.files(pattern="^w.*?\.tsv")

# read them all at once into a list called "file_list"
file_list <- lapply(filenames, function(x) {read.table(x, sep = "\t", header = T)})

基础 R 解决方案:

# Resolve in the names of the files: 
# file_paths => character vector
file_paths <- list.files(
  path = "~/project/datasets",
  pattern = "^W.*\.tsv$",
  full.names = TRUE
)

# Allocate some memory: df_list => empty list: 
df_list <- vector(
  "list", 
  length(file_paths)
)

# Read the tables into a list: df_list => list of data.frames
df_list <- lapply(
 file_paths,
 function(x){
   read.table(
     x, 
     sep = '\t', 
     header = TRUE
     )
   )
 } 
)

# If you can combine them (i.e. all columns are present in 
# the .tsv in the same order): df => data.frame
df <- do.call(
  rbind,
  df_list
)