2013-02-06 50 views
1

似乎我不太了解嵌套for循环。我想在嵌套多个目录工作的for循环是这样的:如何在嵌套for循环中使用多个目录:

sp_folder1<-list.files("species1/",full.names=TRUE) 
    sp_folder2<-list.files("species2/",full.names=TRUE) 
setwd(sp_folder1) 
    for(i in 1: length(sp_folder1)){ 
     for(j in 1: length(sp_folder2){ 
     sp_i<-read.delim(list.files(sp_folder1)[i],header=T) 
    sp_j<-read.delim(list.files(sp_folder2)[j],header=T) 
    Do something with both files 
     } 
     } 

但是,我得到一个错误:在文件 错误(文件,“RT”):无法打开连接 没有这样的文件或目录: 虽然,'sp_folder1'中的第一个文件很好。我尽量不设置工作目录,但仍然无效。

回答

1

最简单的方法是先于循环读取文件。我假设你有两个存放文件的子目录。

(代码未测试)

#create vectors of filenames 
#I assume that this works for you 
sp_folder1<-list.files("species1/",full.names=TRUE) 
sp_folder2<-list.files("species2/",full.names=TRUE) 

#set working directory 
setwd('.../species1') 
#loop over filenames, read all files and put the data.frames in a list 
dat.list.1 <- lapply(sp_folder1,read.delim,header=TRUE) 
setwd('.../species2') 
dat.list.2 <- lapply(sp_folder2,read.delim,header=TRUE) 

现在你有data.frames的两个列表,你可以在你的循环使用访问,例如,dat.list.1[[i]]

+0

的代码工作,我现在有数据帧的两份名单,但我不能在这两个名单,朗姆酒循环。因为,这两个列表是物种文件,现在我在每个列表中有110种物种。现在,我想从两个相同物种的列表中使用两个文件,并比较结果并将输出结果作为分隔文件。但是,我只能访问第一个文件,然后循环结束。 – Gongon

+0

那么,我该如何知道错误在哪里?我刚刚注意到,您在所展示的代码中缺少右括号。 – Roland

+0

不能只使用'list.files(recursive = TRUE)'并有权访问完整路径? –