2016-06-11 35 views
3

解決這個問題我有一個序列代碼如下所示如何在R(組合)

A = A 
C = C 
G = G 
T = T 
W = A or T 
S = C or G 
M = A or C 
K = G or T 
R = A or G 
Y = C or T 
B = C or G or T 
D = A or G or T 
H = A or C or T 
V = A or C or G 
N = A or C or G or T 

我想我的計算序列的組合。

這裏是我想要得到的組合的幾個例子:

Example 1 ATGTTTGARCCACGYATHCCTAC 

Example 2 CAACGTCGTAATAAGGAAGTTTAG 

Example 3 CAGGTTGAGTATYTWCAAATTAC 

Example 4 AAACCATRATGCCATTATAATATTG 

請你能不能給我提供可能的代碼本,T將是一個很大的幫助確實如此。

+0

'expand.grid'是你的朋友。祝你好運。 – 989

回答

3

您可以使用chartr RO替換字符

#Your string 
x <- "ATGCTGATCGAGCTANATCGATCGGACTACY" 

# Get all combinations of replacement strings 
# paste together for chartr function 
ex <- do.call(paste0, expand.grid(N = c("A", "T", "G", "C"), Y = c("C", "T"))) 

# koop through each combination , replacing the string 
sapply(ex, chartr, old="NY", x=x) 

#        AC        TC 
# "ATGCTGATCGAGCTAAATCGATCGGACTACC" "ATGCTGATCGAGCTATATCGATCGGACTACC" 
#        GC        CC 
# "ATGCTGATCGAGCTAGATCGATCGGACTACC" "ATGCTGATCGAGCTACATCGATCGGACTACC" 
#        AT        TT 
# "ATGCTGATCGAGCTAAATCGATCGGACTACT" "ATGCTGATCGAGCTATATCGATCGGACTACT" 
#        GT        CT 
# "ATGCTGATCGAGCTAGATCGATCGGACTACT" "ATGCTGATCGAGCTACATCGATCGGACTACT" 

更新了您的擴展的例子

# lookup table of replacements 
lookup <- list(
A = 'A' , 
C = 'C' , 
G = 'G' , 
T = 'T', 
W = c('A', 'T') , 
S = c('C', 'G') , 
M = c('A', 'C') , 
K = c('G', 'T'), 
R = c('A', 'G') , 
Y = c('C', 'T') , 
B = c('C', 'G', 'T') , 
D = c('A', 'G', 'T') , 
H = c('A', 'C', 'T') , 
V = c('A', 'C', 'G') , 
N = c('A', 'C', 'G', 'T')) 

# Get unique character that are in sequence 
yourseq <- "ATGTTTGARCCACGYATHCCTAC" # example 1 
uniq.char <- unique(strsplit(yourseq, "")[[1]]) 

# subset look up to only use characters found in sequence 
# this will keep the exapnd.grid replacements more reasonable size 
# find all combinations of these 
# and paste together 
ex <- do.call(expand.grid, lookup[uniq.char]) 
vec <- do.call(paste0, ex) 

# Get all sequences 
sapply(vec, chartr, old=paste(names(ex), collapse=""), x=yourseq) 
+0

嗨親愛的感謝如果你填寫獨特的字母,這將是一個很大的幫助。謝謝。實際上我是R的導演,只是無法正確填寫示例並獲得錯誤。如果你只是請填寫他們,我可以在我的電腦上運行例如1然後其他人將更容易我替換和工作謝謝 –

+0

林不知道我明白。如果您複製並粘貼上面的代碼(特別是編輯),它應該執行並輸出序列。爲了讓它在不同的序列字符串上工作,所有你需要做的就是編輯'yourseq < - ...'行。 – user20650

+1

謝謝親愛的...它的工作...您的幫助表示感謝 Regards –

0

考慮:

s1="ATGCTGATCGAGCTA" 
s2="ATCGATCGGACTAC" 
sep="**" 
t1=c("A","T","G","C") 
t2=c("C","T") 

這裏是你可以做什麼:

res=do.call(expand.grid, list(a=1:length(t1), b=1:length(t2))) 
paste0(s1,sep,t1[res[,1]],sep,s2,sep,t2[res[,2]],sep) 

輸出

[1] "ATGCTGATCGAGCTA**A**ATCGATCGGACTAC**C**" "ATGCTGATCGAGCTA**T**ATCGATCGGACTAC**C**" 
[3] "ATGCTGATCGAGCTA**G**ATCGATCGGACTAC**C**" "ATGCTGATCGAGCTA**C**ATCGATCGGACTAC**C**" 
[5] "ATGCTGATCGAGCTA**A**ATCGATCGGACTAC**T**" "ATGCTGATCGAGCTA**T**ATCGATCGGACTAC**T**" 
[7] "ATGCTGATCGAGCTA**G**ATCGATCGGACTAC**T**" "ATGCTGATCGAGCTA**C**ATCGATCGGACTAC**T**" 
+0

謝謝,親愛的您的意見,但我想我不太清楚我的問題。親愛爲seqeunce碼是甲\t = \t甲\tÇ\t = \tÇ\tģ\t = \tģ\tŤ\t = \t TW \t = \t A或T \t小號\t = \t C或G \t中號\t = \t A或C \t \tķ= \t G或TR \t \t = A或G \t \tÝ= \t C或TB \t \t = C或G或T \t d \t = \t A或G或TH \t = \t A或C或電視\t = \t A或C或G \t N = \t A或C或G或T我的序列的幾個例子我想要得到的組合是實施例1個ATGTTTGARCCACGYATHCCTAC示例2 CAACGTCGTAATAAGGAAGTTTAG請如果您能爲我提供這個可能的代碼這將是一個很大的幫助,確實 –

+0

對不起,但我不明白你的觀點。輸出與您在問題中陳述的輸出相同。 – 989

+0

致謝親愛的您的寶貴意見並回復我。我已編輯了我的問題,請你現在看看這個問題。 謝謝 –