这是我第一次用两个变量创建一个for循环。我有一堆要进行的DNA测序样品。每组数据都有两个需要同时运行的文件。
当我只在R中运行不带for循环变量的system(paste())时,它就可以正常工作。所以我知道问题出在循环本身。当我运行下面的脚本时,没有收到错误,它运行但没有任何反应。
我显然搞砸了。我只是不知道从这里去哪里。
for (j in list.files(pattern = "R1_001.trim.paired.fastq.gz")) {
for (h in list.files(pattern = "R2_001.trim.paired.fastq.gz")) {
outname=paste(substr(j, start=1, stop=7), sep= "")
system(paste("docker run -v /path/:/path/ -w /path/ combinelab/salmon salmon quant -i /path/CanFam3.1_index -l A -1 ",j,"-2 ",h,"-o ",outname, ,sep="")
)
}
}
答案 0 :(得分:1)
在您提供的代码中,我唯一能立即看到的就是缺少一些空格,这些空格可能导致观察到的行为。您也可以使用paste0
代替paste(...,sep="")
,希望以下内容能帮助您
for (j in list.files(pattern = "R1_001.trim.paired.fastq.gz")) {
for (h in list.files(pattern = "R2_001.trim.paired.fastq.gz")) {
outname=substr(j, start=1, stop=7)
system(paste0("docker run -v /path/:/path/ -w /path/ combinelab/salmon salmon quant -i /path/CanFam3.1_index -l A -1 ",j," -2 ",h," -o ",outname))
}
}
编辑
在for循环之外通过character(0)
命令获得list.files
表示您没有将wd
中的任何文件与模式匹配。
如果您确定文件位于正确的wd
中,或者直接在wd
命令中设置list.files
(list.files(path = ".", pattern = NULL)
,则可以尝试以下方法的组合Sonny和Parfait在上面的注释中提到的内容是运行for循环,用system
替换print
,并在pattern
命令中删除list.files
规范,这将告诉您是否您会收到正确的docker字符串(尽管可能还会打印出不正确的文件,以便以后可以通过更新模式来进行过滤)。