2016-06-11 3 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 

Пожалуйста, если вы можете предоставить мне возможный код для этого, т будет большую помощь в самом деле.

+0

'expand.grid' является вашим другом. удачи. – 989

ответ

3

Вы можете использовать chartr ро заменить символы

#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

Спасибо, дорогой ... Его работа ...ваша помощь с оценкой С уважением –

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 G \t = \t G \t Т \t = \t TW \t = \t А или Т \t S \t = \t С или G \t М \t = \t А или С К \t \t = \t G или TR = \t \t А или G \t \t Y = С или \t \t ТБ = \t С или G или Т \t D \t = \t А или G, или TH \t = \t А или С или телевизор \t = \t А или С или G \t N = \t А или С или G или Т несколько примеров моих последовательностей, которые я хочу получить комбинации Пример 1 ATGTTTGARCCACGYATHCCTAC Примеры 2 CAACGTCGTAATAAGGAAGTTTAG Пожалуйста, если вы можете предоставить мне возможный код для этого, это будет отличная помощь –

+0

извините, но я не поймаю вашу мысль. Результат - это тот же результат, который вы указали в своем вопросе. – 989

+0

Спасибо Дорогой за ваши ценные комментарии и ответы на меня. Я отредактировал мой вопрос, можете ли вы взглянуть сейчас на вопрос. Спасибо –

Смежные вопросы