对于R中的循环问题

Ste*_*ney 3 for-loop r file

希望我能够很好地解释我的问题以获得答案 - 任何帮助将不胜感激.

我有一个数字,如果数据文件,我需要合并为一个.我使用for循环来执行此操作并添加一个列,指示它是哪个文件.

在这种情况下,有6个文件,每个文件最多包含100个数据条目.

当有6个文件时,我没有问题让它运行.

但是当我有更少的问题时.

我想要做的是使用for循环来测试文件,并使用for循环变量来组装一个引用存在的文件的向量.

我似乎无法获得新变量来组合for循环变量的新值.

这是我到目前为止编写的示例代码.

for ( rloop1 in 1 : 6) {
ReadFile=paste(rloop1,SampleName,"_",FileName,"_Stats.csv", sep="")
if (file.exists(ReadFile))
**files_found <- c(rloop1)**
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是files_found将包含那些文件,其中1 ... 6对找到的文件有效.

关心史蒂夫

Rei*_*son 7

列出要加载的文件可能会更好,然后循环遍历该列表以加载它们.list.files是你的朋友.我们可以使用正则表达式仅列出那些以结尾的文件"_Stats.csv".例如,在我当前的工作目录中,我有以下文件:

$ ls | grep Stats
bar_Stats.csv
foobar_Stats.csv
foobar_Stats.csv.txt
foo_Stats.csv
Run Code Online (Sandbox Code Playgroud)

其中只有三个是我要加载的csv文件(该.txt文件与您显示的模式不匹配).我们可以使用list.files()以下方法获取这些文件

> list.files(pattern = "_Stats.csv$")
[1] "bar_Stats.csv"    "foo_Stats.csv"    "foobar_Stats.csv"
Run Code Online (Sandbox Code Playgroud)

然后你可以遍历它并读取文件.像:

fnames <- list.files(pattern = "_Stats.csv$")
for(i in seq_along(fnames)) {
    assign(paste("file_", i, sep = ""), read.csv(fnames[i]))
}
Run Code Online (Sandbox Code Playgroud)

这将创建一系列对象file_1,file_2,file_3等在全球的工作区.如果你想在一个列表中的文件,您可以改为lapplyfnames:

lapply(fnames, read.csv)
Run Code Online (Sandbox Code Playgroud)

如果合适,do.call可能有助于组合列表中的文件:

do.call(rbind, lapply(fnames, read.csv))
Run Code Online (Sandbox Code Playgroud)