【问题标题】:How to fix a loop to write multiple FASTA files from DNAStringSet in R?如何修复循环以从 R 中的 DNAStringSet 写入多个 FASTA 文件?
【发布时间】:2020-12-18 17:06:26
【问题描述】:

我有这个 DNAStringSet(基因组),需要将每个基因组作为一个单独的 FASTA 文件放在一个目录中,但它们仍然是长度为 1 的字符串集。每个文件的名称都连接在一个向量(名称)中,因为它们太多了我创建了这个循环:

n <- seq_len(length(names))
for(i in 1:n){
  for(j in seq_len(length(names))){
  writeXStringSet(genomes[i],names[j])
  }
}

并返回:

Warning message:
In 1:n : numerical expression has 95 elements: only the first used

我检查了结果,文件名称正确但所有文件的顺序都是第一个。 我改变了循环:

for(i in seq_len(length(genomes))){
  for(j in seq_len(length(names))){
  writeXStringSet(genomes[i],names[j])
  }
}

没有出现错误,但现在所有文件都包含 StringSet 的最后一个序列。

我是使用Biostrings 包的新手,我认为我不能使用lapply 或其中的任何一个,因为该对象不是列表。有什么办法可以解决这个问题,以便我可以获取所有带有相应基因组的文件?

对象示例:

> genomes
DNAStringSet object of length 2:
    width seq                                          names               
[1] 47 TATAAAACACCCTCAATTCAAGGGTTTAATTTTTCACAATCATTAAA HP83
[2] 47 TAAAACACCCTCAATTCAAGGGTTTCATTTTTTAAAACTATTAAATA HPS49
[3] 47 AAAAACCTTGTTTTAGTCTTTTTTATAGATTTCATGTTCAAGTCTTC P49

>names <- c("HP83.fasta","HPS49.fasta","P49.fasta")

【问题讨论】:

    标签: r loops fasta dna-sequence writefile


    【解决方案1】:

    第一个问题在于向量的分配。

    R 正在尝试考虑您的第一个陈述:

    n <- seq(x)
    for (i in 1:n) { <whatever> }
    

    作为

    for (i in 1:(1:n)) { <whatever> }
    

    所以 R 看着它,基本上说“这没有意义”,运行一个看起来像这样的循环:

    for (i in 1:1) { <whatever> }
    

    然后对你大喊大叫。

    你的第二个问题是你让这比它需要的复杂一点。因为您有一个嵌套循环,所以您将第一个“i”与每个“j”一起保存,然后是第二个,然后是第三个,等等......并且因为“j”正在指定要保存到的文件名,所以你结果是最后一个基因组“i”被保存为每个文件名。 writeXStringSet 默认将 append 设置为 FALSE,因此它会用新的文件名覆盖文件名的每次迭代。

    你真的只需要看起来像这样的东西:

    for (m1 in seq_along(genomes)) {
      writeXStringSet(x = genomes[m1],
                      filepath = paste0("~/",
                                        m1,
                                        ".fasta"))
    }
    

    或者你的具体名字

    for (m1 in seq_along(genomes)) {
          writeXStringSet(x = genomes[m1],
                          filepath = names[m1])
    }
    

    将来,在您的问题中提供简单的可重复示例也很有帮助。例如“我的序列看起来像:...”

    <some snippet of code that generates simple exampel data>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      相关资源
      最近更新 更多