在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循环。我有一堆DNA测序样本,我想检查一下。每组数据都有两个需要同时运行的文件

当我只是在R中运行系统(paste())而不使用for循环变量时,它工作得很好。所以我知道问题在于循环本身。当我运行下面的脚本时,没有出现错误,它运行了,但什么也没发生

我显然把事情搞砸了。我只是不知道接下来该怎么办

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=”“)
我只需要在
的后面加上空格