读取文件而不在 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
)
我在名为数据集的文件夹中有一些文件 (.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
)