在for循环中通过系统运行代码时,不会执行命令
这是我第一次用两个变量创建for循环。我有一堆DNA测序样本,我想检查一下。每组数据都有两个需要同时运行的文件 当我只是在R中运行系统(paste())而不使用for循环变量时,它工作得很好。所以我知道问题在于循环本身。当我运行下面的脚本时,没有出现错误,它运行了,但什么也没发生 我显然把事情搞砸了。我只是不知道接下来该怎么办在for循环中通过系统运行代码时,不会执行命令,r,for-loop,R,For Loop,这是我第一次用两个变量创建for循环。我有一堆DNA测序样本,我想检查一下。每组数据都有两个需要同时运行的文件 当我只是在R中运行系统(paste())而不使用for循环变量时,它工作得很好。所以我知道问题在于循环本身。当我运行下面的脚本时,没有出现错误,它运行了,但什么也没发生 我显然把事情搞砸了。我只是不知道接下来该怎么办 for (j in list.files(pattern = "R1_001.trim.paired.fastq.gz")) { for (h in list.fil
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="")
)
}
}
我能在您提供的代码中立即看到的唯一一件事是缺少一些空格,这可能会导致观察到的行为。您也可以使用
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循环之外获取字符(0)
作为您的列表的结果。文件
命令表明您没有将wd
中的任何文件与您的模式匹配
如果您确定文件位于正确的
wd
中,或者您直接在list.files
命令中设置wd
(list.files(path=“.”,pattern=NULL)
,您可以尝试将Sonny和Parfait在上述评论中提到的方法结合起来,运行for循环,将系统
替换为打印
,并删除list.files
命令中的模式
规范。这将告诉您发送的docker字符串是否正确(尽管也可能打印出不正确的文件,您可以稍后通过可能更新模式进行过滤).查看粘贴输出是否正确。如果在终端上运行所有粘贴输出,会发生什么情况。这是否正常?@Sonny您希望我在终端上运行什么?我的意思是在shell提示符下运行Docker命令一件事可能是sep
之前的额外空间缺失了参数,带有没有默认的
错误:,outname,sep=“”)
应该是,outname,sep=“”)
循环是否正常工作?如果你把print(c(j,h))
放进去,你会看到正确的文件吗?得到与paste(…,sep=“”)相同的结果
我确实在运行print(c(j,h))时遇到了一个错误,并且在打印(c(j,h))时得到了这个错误:找不到对象“h”`所以可能是h有问题吗?坏符号,j
看起来如何?单独使用list.files
时,您是否看到任何问题?这是我运行list.files函数(path=“”,pattern=NULL,all.files=FALSE,full.names=FALSE,recursive=FALSE,ignore.case=FALSE,include.dirs=FALSE,no..=FALSE)时得到的结果。内部(list.files)(path,pattern,all.files,full.names,recursive,ignore.case,include.dirs,no…)
我也试过运行j
并返回NULL
但当我试着只运行h
时返回错误:找不到对象“h”
试着运行list.files(pattern=“R2_001.trim.paired.fastq.gz”)
并使用getwd()
检查您的工作目录,我发现我是个白痴。模式功能错误,名称较短。我下载了一个子集数据。我感觉自己像个白痴。此外,要修复上面的系统功能,我只需运行system(粘贴(“docker run-v/path/:/path/-w/path/combinelab/salmon-salmon-quant-i/path/cange.3.30.19_index-la-1”,j,“-2”,h,“-o”,outname,sep=”“)
我只需要在的后面加上空格