繁体   English   中英

如何修复循环以从 R 中的 DNAStringSet 写入多个 FASTA 文件?

[英]How to fix a loop to write multiple FASTA files from DNAStringSet in R?

我有这个 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或其中任何一个,因为 object 不是列表。 有没有办法可以解决这个问题,这样我就可以获得所有带有相应基因组的文件?

对象样本:

> 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 正在尝试考虑您的第一个陈述:

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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM