美文网首页R
从csv输出序列成fasta格式

从csv输出序列成fasta格式

作者: 城管大队哈队长 | 来源:发表于2019-12-16 17:44 被阅读0次

    昨天老哥让我帮忙看看一个R脚本

    a <- read.csv("XX.csv",sep = ",",header = T)
    b <- a[c("Sequence")]
    class(a)
    class(b)
    head(b)
    library(Biostrings)
    BiocManager::install("seqinr")
    library(seqinr)
    SeqName<-1:36540
    write.fasta(b, names=SeqName, file="b.fasta", open='w', nbchar=60,
                as.string = FALSE)
    s = readDNAStringSet("b.fasta")
    head(s)
    View(s)
    

    然后说问题在于他写的脚本输出的结果总是没有分隔符。看了下,实际上就是用seqinr包的write.fasta函数去把一串序列给保存成fa格式。因为之前没有接触过读取字符串,然后输出成fa的需求,也没有其他的工具可以代替,所以只能看下write.fasta的说明

    ?write.fasta
    

    然后看到这句话

    image

    就猜到如果是多条序列的话,应该导入的是list格式。因为从csv里面最后读取出来是字符串向量,还得搜下怎么转成list。

    image

    地址为:Convert a vector into a list, each element in the vector as an element in the list

    然后就可以了

    a <- read.csv("XX.csv",sep = ",",header = T,stringsAsFactors = F) # 注意下不要变成因子
    b <- a[,c("Sequence")] # 注意下变成字符串就行,不要变成数据框
    
    b <- as.list(b)
    
    library(Biostrings)
    library(seqinr)
    
    SeqName<-1:36540
    write.fasta(b, names=SeqName, file="b.fasta", open='w', nbchar=60)
    
    >1
    gGGGGYGGGGGYGGGGGGGYGQR
    >2
    vAGGGGGGGGGGGGGAGGGGGGEEGAGk
    

    一个可以练习的版本

    library(stringi)
    a <- data.frame(Sequence = stri_rand_strings(5,sample(1:10,5)),
                    name = paste0("str_",1:5),
                    stringsAsFactors = F)
    
    seq_list <- as.list(a$Sequence)
    library(seqinr)
    write.fasta(seq_list,names = a$name, file="a.fa", open='w', nbchar=60)
    

    PS:

    • 我觉得这种输出fasta还是考虑用Pyhon或者linux上的工具吧。感觉这个函数好像写的不太好。

    • 附上我怎么找到stri_rand_strings函数

      image

    相关文章

      网友评论

        本文标题:从csv输出序列成fasta格式

        本文链接:https://www.haomeiwen.com/subject/vmvdnctx.html