第一次运行后退出R循环

时间:2018-01-30 12:06:54

标签: r

平,

我有一个循环,我想根据条件运行以分隔多个表中的文件。基本上我采用psms表中的每个唯一文件名,并将这些行分成单独的文件。

writeCSVTables <- function(files, psms){

for(i in length(files)){    
name <- tools::file_path_sans_ext(files[i])
write.table(psms[grep(name, psms$file), c("accession", "sequence", "peptide",
                                          "modif", "fixed", "file", "spectrum")],
            paste(name,".corr.csv", sep =""), sep ="\t", row.names = FALSE, quote = FALSE)
 }
}

我的问题是循环只对第一个文件名运行一次,然后退出就好像它成功了。我查看了文件向量,它确实包含2个唯一的文件名,因此循环应该运行两次。任何建议的离子?

2 个答案:

答案 0 :(得分:4)

如果length(files)为2,那么你的for循环遍历1元素向量,其唯一元素为2.

无论如何 - 为什么要使用指数?只需直接遍历文件名。

替换

for(i in length(files)){    
name <- tools::file_path_sans_ext(files[i])

通过

for(fname in files){    
  name <- tools::file_path_sans_ext(fname)

答案 1 :(得分:2)

尝试改为

[...]
for(i in seq(length(files))){    
[...]

说明

符号for(i in length(files))表示变量i将迭代地假设其旁边的向量中的所有值。 length(files)是单个值,因此它只运行一次,然后退出。按设计工作。

您可能想要的是for(i in seq(length(files)))。在此,i假定seq(length(files))中的每个值( 123,...,{{1迭代地。

其他解决方案也可以更好地利用矢量化。