10

DNA配列があるとします。私はそれの補足を取得したい。次のコードを使用しましたが、取得できません。私は何を間違っていますか?

s=readline()
ATCTCGGCGCGCATCGCGTACGCTACTAGC
p=unlist(strsplit(s,""))
h=rep("N",nchar(s))
unlist(lapply(p,function(d){
for b in (1:nchar(s)) {    
    if (p[b]=="A") h[b]="T"
    if (p[b]=="T") h[b]="A"
    if (p[b]=="G") h[b]="C"
    if (p[b]=="C") h[b]="G"
}
4

7 に答える 7

15

chartrこの目的のために構築された使用:

> s
[1] "ATCTCGGCGCGCATCGCGTACGCTACTAGC"
> chartr("ATGC","TACG",s)
[1] "TAGAGCCGCGCGTAGCGCATGCGATGATCG"

2 つの等しい長さの文字列とあなたの文字列を与えるだけです。また、変換の引数をベクトル化します。

> chartr("ATGC","TACG",c("AAAACG","TTTTT"))
[1] "TTTTGC" "AAAAA" 

ベクトルではなく、DNA の文字列表現で置換を行っていることに注意してください。ベクトルを変換するには、次のような名前付きベクトルとインデックスとしてルックアップ マップを作成します。

> p
 [1] "A" "T" "C" "T" "C" "G" "G" "C" "G" "C" "G" "C" "A" "T" "C" "G" "C" "G" "T"
[20] "A" "C" "G" "C" "T" "A" "C" "T" "A" "G" "C"
> map=c("A"="T", "T"="A","G"="C","C"="G")
> unname(map[p])
 [1] "T" "A" "G" "A" "G" "C" "C" "G" "C" "G" "C" "G" "T" "A" "G" "C" "G" "C" "A"
[20] "T" "G" "C" "G" "A" "T" "G" "A" "T" "C" "G"
于 2013-12-04T10:54:57.513 に答える
5
sapply(p, switch,  "A"="T", "T"="A","G"="C","C"="G")
  A   T   C   T   C   G   G   C   G   C   G   C   A   T   C   G   C   G   T 
"T" "A" "G" "A" "G" "C" "C" "G" "C" "G" "C" "G" "T" "A" "G" "C" "G" "C" "A" 
  A   C   G   C   T   A   C   T   A   G   C 
"T" "G" "C" "G" "A" "T" "G" "A" "T" "C" "G" 

補完的な名前が必要ない場合は、いつでも で取り除くことができますunname

unname(sapply(p, switch,  "A"="T", "T"="A","G"="C","C"="G") )
 [1] "T" "A" "G" "A" "G" "C" "C" "G" "C" "G" "C" "G" "T" "A" "G" "C" "G" "C"
[19] "A" "T" "G" "C" "G" "A" "T" "G" "A" "T" "C" "G"
> 
于 2013-12-04T09:58:11.553 に答える
5

パッケージ seqinr もあります

library(seqinr)
comp(seq) # gives complement
rev(comp(seq)) # gives the reverse complement

Biostrings のメモリ プロファイルははるかに小さいですが、seqinr は塩基の大文字と小文字 (混合を含む) を選択し、それらを好きなように変更できるという点でも優れています。たとえば、同じシーケンスで T と U の混合が必要な場合などです。バイオストリングスは、T または U のいずれかを強制します。

于 2014-01-14T04:10:10.093 に答える
0

パッケージを使用してソリューションrev(comp(seq))を一般化しました。seqinr

install.packages("devtools")
devtools::install_github("TomKellyGenetics/tktools")
tktools::revcomp(seq)

このバージョンは文字列入力と互換性があり、複数の文字列のリストまたはベクトル入力を処理するためにベクトル化されています。出力クラスは、ケースとタイプを含め、入力と一致する必要があります。これは、RNA および RNA 出力シーケンスの「U」を含む入力もサポートします。

> seq <- "ATCTCGGCGCGCATCGCGTACGCTACTAGC"
> revcomp(seq)
[1] "GCTAGTAGCGTACGCGATGCGCGCCGAGAT"

> seq <- c("TATAAT", "TTTCGC", "atgcat")
> revcomp(seq)
  TATAAT   TTTCGC   atgcat 
 "ATTATA" "GCGAAA" "atgcat" 

マニュアルまたはTomKellyGenetics/tktools github パッケージ リポジトリを参照してください。

于 2019-04-04T08:25:04.083 に答える