Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何迭代函数中的条目以创建两个新的字符向量_R_Bioinformatics_Fasta - Fatal编程技术网

R 如何迭代函数中的条目以创建两个新的字符向量

R 如何迭代函数中的条目以创建两个新的字符向量,r,bioinformatics,fasta,R,Bioinformatics,Fasta,我正在努力将单个字符串输入分离为一系列输入。用户给出了FASTA格式序列的列表(参见下面的示例)。我能够将输入分离成它们自己的 例: 但我正在努力寻找一种方法来创建一种功能,将“Rosalind_6404”从基因序列中拆分为未知数量的FASTA序列,同时为拆分的元素创建新的载体。 最终,结果将如下所示: .> "Rosalind_6404" "Rosalind5959" .> "CCTGCGGAAGATCGGCACTAGAATAGCC

我正在努力将单个字符串输入分离为一系列输入。用户给出了FASTA格式序列的列表(参见下面的示例)。我能够将输入分离成它们自己的

例:

但我正在努力寻找一种方法来创建一种功能,将“Rosalind_6404”从基因序列中拆分为未知数量的FASTA序列,同时为拆分的元素创建新的载体。 最终,结果将如下所示:

.> "Rosalind_6404" "Rosalind5959"
.> "CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCCTCCCACTAATAATTCTGAGG","CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCTATATCCATTTGTCAGCAGACACGC"
我希望convert_entries函数可以让我迭代预处理的_字符向量的所有元素,并将元素拆分为两个具有相同索引号的新向量

s <- ">Rosalind_6404
CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC
TCCCACTAATAATTCTGAGG
>Rosalind_5959
CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT
ATATCCATTTGTCAGCAGACACGC"

split_s <- strsplit(s, ">")
ul_split_s<- unlist(split_s)
fixed_s <- gsub("\n","", ul_split_s)
prepped_s <- fixed_s[-1]
prepped_s
nchar(prepped_s[2])
print(prepped_s[2])

entry_tags <- list()
entry_seqs <- list()

entries <- length(prepped_s)
unlist(entries)
first <- prepped_s[1]

convert_entries <- function() {
  for (i in entries) {
    tag <- substr(prepped_s[i], start = 1, stop = 13)
    entry_tags <- append(entry_tags, tag)
    return(entry_tags)
  } 
}
entry_tags <- convert_entries()
print(entry_tags)


s带
tidyverse的一个选项

library(dplyr)
library(tidyr)
library(stringr)
tibble(col1 = s) %>% 
   separate_rows(col1, sep="\n") %>%
   group_by(grp = cumsum(str_detect(col1, '^>'))) %>%
   summarise(prefix = first(col1), 
             col1 = str_c(col1[-1], collapse=""), .groups = 'drop') %>% 
   select(-grp)
-输出

# A tibble: 2 x 2
  prefix           col1                                                                                
  <chr>          <chr>                                                                               
1 >Rosalind_6404 CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCCTCCCACTAATAATTCTGAGG    
2 >Rosalind_5959 CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCTATATCCATTTGTCAGCAGACACGC
#一个tible:2x2
前缀col1
1>Rosalind6404CCTGCGGAATCGGCACTAGATAGACAGAACCGTTTCTGAGGTTCCGGCCTTCCCTCCCACATATATCTGAGG
2>Rosalind5959ccatcggtagcgcatccttagtcatccatccatccatccatccatccatccatccatccatccatccatccatccatccatccatccatccatccatccagcgcatccatccatccagcgcatccatccatccatccatccatccatccatccatccatccatccatccat

在base R中,您可以执行以下操作:

t(gsub('\n', '', regmatches(s, gregexec("([A-Z][a-z_0-9]+)\n([A-Z\n]+)", s))[[1]][-1,]))
     [,1]            [,2]                                                                                  
[1,] "Rosalind_6404" "CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCCTCCCACTAATAATTCTGAGG"    
[2,] "Rosalind_5959" "CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCTATATCCATTTGTCAGCAGACACGC"
注:我对矩阵进行了转置,以便您可以比较结果。忽略
t
函数的使用

另一个基本的R解决方案:

  read.table(text=sub('\n', ' ', gsub('(\\D)\n', '\\1', unlist(strsplit(s, '>')))))
             V1                                                                                   V2
1 Rosalind_6404     CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCCTCCCACTAATAATTCTGAGG
2 Rosalind_5959 CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCTATATCCATTTGTCAGCAGACACGC
甚至

proto <- data.frame(name = character(), value = character())
new_s <- gsub('\n', '', unlist(strsplit(s, '>')))
strcapture("([A-Z][a-z_0-9]+)([A-Z]+)", grep('\\w', new_s, value = T), proto)

           name                                                                                value
1 Rosalind_6404     CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCCTCCCACTAATAATTCTGAGG
2 Rosalind_5959 CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCTATATCCATTTGTCAGCAGACACGC
proto使用:

库(seqinr)
#文件示例
写(“>Rosalind_6404
CCTGCGGAGAGATGCGGCactAgataGCCAGAACCGTTTCTCTGAGGGCTTCCGGCCTTCCC
TCCCACTAATATTCTGG
>罗莎琳德5959
CCATCGTAGCCATCCTTAGTCATTAGCTCTCAGCGCTCCGCCGAAGGTCT
“myFile.fasta”)
#读取fasta文件

谢谢你的回复。我似乎最了解第二垒和第三垒的解决方案;但是,我仍然对函数的这一部分的结果感到困惑:2)text=sub('\n','',gsub('(\\D)\n','\\1',3)老实说,也不确定这是如何工作的:strcapture(([A-Z][A-Z_0-9]+)([A-Z]+),grep('\\w',new_s,value=T),proto)@Willy_Johnston尝试从内向外展开。请注意,
text=
read.table
函数的一个参数。因此,首先尝试运行
a
proto <- data.frame(name = character(), value = character())
new_s <- gsub('\n', '', unlist(strsplit(s, '>')))
strcapture("([A-Z][a-z_0-9]+)([A-Z]+)", grep('\\w', new_s, value = T), proto)

           name                                                                                value
1 Rosalind_6404     CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCCTCCCACTAATAATTCTGAGG
2 Rosalind_5959 CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCTATATCCATTTGTCAGCAGACACGC
library(seqinr)

# example fasta file
write(">Rosalind_6404
CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC
TCCCACTAATAATTCTGAGG
>Rosalind_5959
CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT
ATATCCATTTGTCAGCAGACACGC", "myFile.fasta")

# read the fasta file
x <- read.fasta("myFile.fasta", as.string = TRUE, forceDNAtolower = FALSE)

# get the names
names(x)
# [1] "Rosalind_6404" "Rosalind_5959"

# get the seq
x$Rosalind_6404
# [1] "CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCCTCCCACTAATAATTCTGAGG"
# attr(,"name")
# [1] "Rosalind_6404"
# attr(,"Annot")
# [1] ">Rosalind_6404"
# attr(,"class")
# [1] "SeqFastadna"