昨天老哥让我帮忙看看一个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
网友评论