使用R中三位数的多输入算法在多个文件上循环

使用R中三位数的多输入算法在多个文件上循环,r,loops,for-loop,R,Loops,For Loop,我正在使用一个叫做SAIGE-GENE的基因解释软件。算法如下所示(完整算法):它涉及多个不同的文件,文件名中有染色体编号(1到22) 我没有把整件事都放在这里,因为它不相关。我在这个算法中输入了一些不同的文件,通常我把我的文件命名为chr1\u file\u name.txt…chr22\u file\u name.txt 然后,我在整个算法中使用R中的for循环,使用粘贴函数按染色体编号输入不同的文件名: for(i in 1:22){SPAGMMATtest = function(

我正在使用一个叫做SAIGE-GENE的基因解释软件。算法如下所示(完整算法):它涉及多个不同的文件,文件名中有染色体编号(1到22)

我没有把整件事都放在这里,因为它不相关。我在这个算法中输入了一些不同的文件,通常我把我的文件命名为chr1\u file\u name.txt…chr22\u file\u name.txt

然后,我在整个算法中使用R中的for循环,使用粘贴函数按染色体编号输入不同的文件名:

for(i in 1:22){SPAGMMATtest = function(
         vcfFile = paste("chr",i,"_file_name.txt", sep=""),
                 vcfFileIndex = "",
         vcfField = "DS",
         savFile = "",
         groupFile ="paste("chr",i,".group_file.txt", sep="")",

这很好,但是,我认为我会很聪明,在这个实验中使用三位数的文件名命名:chr001_file_name.txt…chr022_file_name.txt

我以前的循环现在不工作,如果我将循环的开始更改为for(001:022中的I),它也不工作

我做错了什么?如何在不重命名所有文件的情况下修复此问题?

建议

尝试:
vcfile=paste(“chr”,sprintf(“%03d”,i),“\u file\u name.txt”,sep=”“)
,编辑:对于较短的代码,可以使用
paste0()
,并删除sep参数

为了创建包含3位数字和前导零的字符文件名,例如001、002、…、022

通过完全使用
sprintf()
创建文件名,从而删除对
paste()
paste0()
的调用,可以进一步缩短文件名:


使用
我尝试:
vcfile=paste(“chr”,sprintf(“%03d”,i),“\u file\u name.txt”,sep=”“),
edit:对于较短的代码,可以使用
paste0()
,并删除sep参数……感谢Wimpel,我认为它起作用了(运行需要很长时间!)。那么,你在循环中坚持(我在1:22)吗?“%03d”是指一个零,然后i总共是3位数字吗?
%03d
是指:转换为三位数字,需要时添加前导零。。因此1变为001,21变为021,201变为201。亲爱的@Uwe,非常感谢您花时间完善代码和有用的解释。多亏了你们的努力,我学到了很多关于sprintf的实用性和更有效地调用循环的知识。
for(i in 1:22){SPAGMMATtest = function(
         vcfFile = paste("chr",i,"_file_name.txt", sep=""),
                 vcfFileIndex = "",
         vcfField = "DS",
         savFile = "",
         groupFile ="paste("chr",i,".group_file.txt", sep="")",
sprintf("chr%03d_file_name.txt", i)
for(i in 1:22){SPAGMMATtest = function(
         vcfFile = paste("chr",i,"_file_name.txt", sep=""),
                 vcfFileIndex = "",
         vcfField = "DS",
         savFile = "",
         groupFile ="paste("chr",i,".group_file.txt", sep="")",
         ...
for (i in 1:22) {
     SPAGMMATtest(
         vcfFile = sprintf("chr%03d_file_name.txt", i),
         vcfFileIndex = "",
         vcfField = "DS",
         savFile = "",
         groupFile = sprintf("chr%03d.group_file.txt", i)
         ...