【问题标题】:loop for creating files用于创建文件的循环
【发布时间】:2021-09-29 08:58:05
【问题描述】:

我想做一个循环。

我有一个如下创建的值列表:

list_snps<-list(20, 101, 109, 265, 465, 509, 526, 630, 743, 795, 836, 99,.....)

我想创建一个循环来自动化以下脚本:

seq20<-substr(mstn_seq, 20, 16757)

16757 始终保持不变,只有 20 应根据列表替换。

seq20 <- capture.output({
  cat('>seq20\n')
  cat(seq20)
})
write.table(seq20, "seq20.fasta", quote=F, row.names = F, 
col.names=F, sep="\t")  

我尝试...

for(i in list_snps){
  paste(seq,i)<-substr(mstn_seq, i, 16757)  
}

但我无法继续。

【问题讨论】:

  • 'capture.output' 表达式应该做什么??? 'seq' 对象从何而来?
  • 嗨 Dario,capture.output 获取打印的 poutput 并放入 R 环境中的对象中。 “seq”只是一个标签
  • 是的,那是行不通的。你对 capture.ouptut 命令的使用对我来说没有意义......

标签: r loops write.table


【解决方案1】:

由于您没有提供可重现的示例,因此您想做什么有点不清楚,所以我尝试猜测:

list_snps<-as.list(1:10)
mstn_seq <- paste0(sample(letters,20,replace = T),collapse = "")
seq_list <- list()

for(i in 1:length(list_snps)){
  seq_list[[i]] <- assign(paste0("seq",i),substr(mstn_seq, list_snps[[i]], 11))
  write.table(seq_list[[i]], paste0("seq",i,".fasta"), quote=F, row.names = F, 
              col.names=F, sep="\t") 
}

您不能使用paste(...)&lt;- 在环境中创建变量,而必须使用assign("var_name",object)

【讨论】:

    【解决方案2】:

    很难猜测更改序列的 ID 会如何实际生成特定的 FASTA 序列。据我所知,您只是在生成相同的 FASTA 文件,只是文件名和 ID 不同。

    无论如何,看看你的代码和你说你想从中得到什么,这是我的建议:

    for(i in list_snps){
      seq_i<-substr(mstn_seq, i, 16757)
      
      seq_i <- capture.output({
        cat(paste0('>seq', i, '\n')
        cat(seq_i)
      })
        
      write.table(seq_i, paste0("seq", i, ".fasta"), quote=F, row.names = F, 
                  col.names=F, sep="\t") 
      
    }
    

    但是,如果您真正想做的是采用具有该特定 ID 的特定序列,我会这样做:

    for(i in list_snps){
      seq_i<-grep(i, mstn_seq)
      seq_i = c(seq_i, seq_i + 1)
      seq_i = mstn_seq[seq_i, ]
      
      seq_i <- capture.output({
        cat(paste0('>seq', i, '\n')
            cat(seq_i)
      })
        
        write.table(seq_i, paste0("seq", i, ".fasta"), quote=F, row.names = F, 
                    col.names=F, sep="\t") 
        
    }
    

    【讨论】:

    • 谢谢,我会努力的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-22
    相关资源
    最近更新 更多