从csv输出序列成fasta格式

昨天老哥让我帮忙看看一个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格式)