gpt4 book ai didi

r - 如何放置字符

转载 作者:行者123 更新时间:2023-12-04 12:14:52 24 4
gpt4 key购买 nike

我有一个 fasta 格式文件,其中我必须只保留那些长度小于 100 的节点。但是,我目前面临的问题是我能够分离节点但无法放置字符每个节点在单独的变量中,然后我可以检查其长度,然后将必要的节点与较长的节点分开。所以我的意思是我能够阅读标题和单独的节点,但我如何将每个节点中的字符放入变量中。

这是我的数据样本

>NODE_1
GTTGGCCGAGCCCCAGGACGCGTGGTTGTTGAACCAGATCAGGTCCGGGCTCCACTGCAC
GTAGTCCTCGTTGGACAGCAGCGGGGCGTACGAGGCCAGCTTGACCACGTCGGCGTTGCG
CTCGAGCCGGTCATGAACGCGGCCTCGGCGAGGGCGTTCTTCCAGGCGTTGCCCTGGGAA

>NODE_2
CCTCCGGCGGCACCACGGTCGGCGAGGCCCTCAACATCCTGGAGCGCACCGACCTGTCCA
CCGCGGACAAGGCCGGTTACCTGCACCGCTACATCGAGGCCAGCCGCATCGCGTTCGCGG
ACCGCGGGCGCTGGGTCGGCGACCCCGCCTTCGAGGACGTAC

>NODE_3
CCTCCGGCGGCACCACGGTCGGCGAGGCCCTCAACATCCTGGAGCGCACCGACCTGTCCA
CCGCGGACAAGGCCGGTTACCTGCACCGCTACATCGAGGCCAGCCGCATCGCGTTCGCGG
ACCGCGGGCGCTGGGTCGGCGACCCCGCCTTCGAGGACGTACATCATTCCTTAATCTTCC

我的代码:

x <- readLines("1.fa", n = -1L, ok = TRUE, warn = TRUE)

for (i in 1:length(x)) {
if (substr(x[i],1,1)=='>') {
head <- c(head,x[i])
q <- x[i+1]
if (q=!0) {
contig <- c(contig,q)
print(contig)
contig.length <- c(contig.length, nchar(q))
} else {
break
}
} else {
z <- paste(z,x[i], sep=" ")
}
}

最佳答案

你应该使用 BioConductor为了那个原因。您实际上是在尝试将 FASTA 文件解析为某种列表。 Bioconductor 有一个简单的函数 read.fasta() 可以做到这一点,并返回一个对象,您可以在其中获取长度等。如果您使用序列,学习生物导体绝对值得。

要在 base R 中执行此操作,您需要使用列表,例如:

Split.Fasta <- function(x){
out <- list()
for(i in x){
if(substr(i,1,1)==">") {

name <- gsub(">","",i)
out[[name]] <- character(0)

} else if (grepl("\\w",i)){
out[[name]] <- paste(out[[name]],gsub("\\W","",i),sep="")
}
}
out
}

效果如下:

zz <- textConnection(">NODE_1 
GTTGGCCGAGCCCCAGGACGCGTGGTTGTTGAACCAGATCAGGTCCGGGCTCCACTGCAC
GTAGTCCTCGTTGGACAGCAGCGGGGCGTACGAGGCCAGCTTGACCACGTCGGCGTTGCG
CTCGAGCCGGTCATGAACGCGGCCTCGGCGAGGGCGTTCTTCCAGGCGTTGCCCTGGGAA

>NODE_2
CCTCCGGCGGCACCACGGTCGGCGAGGCCCTCAACATCCTGGAGCGCACCGACCTGTCCA
CCGCGGACAAGGCCGGTTACCTGCACCGCTACATCGAGGCCAGCCGCATCGCGTTCGCGG
ACCGCGGGCGCTGGGTCGGCGACCCCGCCTTCGAGGACGTAC

>NODE_3
CCTCCGGCGGCACCACGGTCGGCGAGGCCCTCAACATCCTGGAGCGCACCGACCTGTCCA
CCGCGGACAAGGCCGGTTACCTGCACCGCTACATCGAGGCCAGCCGCATCGCGTTCGCGG
ACCGCGGGCGCTGGGTCGGCGACCCCGCCTTCGAGGACGTACATCATTCCTTAATCTTCC")

X <- readLines(zz,n=-1L,ok=TRUE,warn=TRUE)
close(zz)

Y <- Split.Fasta(X)
$`NODE_1 `
[1] "GTTGGCCGAGCCCCAGGACGCGTGGTTGTTGAACCAGATCA...

$`NODE_2 `
[1] "CCTCCGGCGGCACCACGGTCGGCGAGGCCCTCAACATCCTGGAGC...

$`NODE_3 `
[1] "CCTCCGGCGGCACCACGGTCGGCGAGGCCCTCAACATCCTGGAGCGCAC...

它返回一个列表,您稍后可以使用它来检查长度等:

sapply(Y,nchar)
NODE_1 NODE_2 NODE_3
180 162 180

不过,学习使用 BioConductor,您会为此感谢自己。

关于r - 如何放置字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6909548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com