Я генерирую случайные последовательности ДНК в R, где каждая последовательность имеет заданную длину и содержит заданное пользователем распределение нуклеотидов.
Что я хочу сделать, это убедиться, что определенные серии нуклеотидов НЕ генерируется в заданной последовательности. Запрещены следующие запуски: «ага», «агг», «таа», «тег» и «тга».
Вот мой код, который просто генерирует последовательности, в которых МОЖЕТ произойти вышеприведенный прогон. Я не уверен, как лучше изменить код для учета запусков "tabu", указанных выше.
library(ape)
length.seqs <- 100 # length of DNA sequence
nucl.freqs <- rep(1/4, 4) # nucleotide frequencies
# DNA alphabet
nucl <- as.DNAbin(c('a', 'c', 'g', 't')) # A, C, G, T
# Randomly sample nucleotides
seqs <- sample(nucl, size = length.seqs, replace = TRUE, prob = nucl.freqs)
Я думаю просто перечислить все разрешенные прогоны, которые будут использоваться вместо 'nucl' и укажите 'size' = length.seqs / 3 в функции sample (), но это кажется громоздким, даже с такими ярлыками, как "expand.grid ()".