Как вы генерируете списки букв в R, которые следуют шаблону повторения? - PullRequest
0 голосов
/ 18 июня 2019

Я хочу создать несколько случайных списков букв, в которых буквы в определенной позиции повторяются.

Вот пример правила "2-назад".Это список случайных букв, но в 25% случаев буква совпадает с буквой, которая была за 2 до нее.Те, которые соответствуют 1, и те, которые не являются 0

R  0
Y  0
M  0
Y  1
L  0
C  0
F  0 
G  0
S  0
G  1

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

Не знаю, хорошо ли я объяснил проблему.Может ли кто-нибудь потенциально помочь мне с этим?

Ответы [ 2 ]

1 голос
/ 18 июня 2019

Поскольку этот процесс зависит от состояния, я думаю, что это может быть редким случаем, когда нормально использовать цикл for / while, который обычно очень медленный по сравнению с альтернативами. Вы все еще хотите предварительно распределить векторы, создавая их общую длину для начала. Вы можете сделать что-то вроде:

total_length = 20
back_prob = 0.25
two_back_seq = character(total_length)
types = character(total_length)

# Generate the random results used to determine if we sample randomly
#   or repeat the 2-back element
rolls = runif(total_length)

current_index = 1
while (current_index <= total_length) {
   if ((rolls[current_index] > back_prob) || (current_index < 3)) {
       two_back_seq[current_index] = sample(letters, 1)
       types[current_index] = "random"
   } else {
       two_back_seq[current_index] = two_back_seq[current_index - 2]
       types[current_index] = "two back"
   }
   current_index = current_index + 1
}

Пример результата:

> two_back_seq
 [1] "u" "x" "u" "b" "x" "w" "t" "w" "o" "b" "o" "l" "m" "m" "m" "u" "d" "t" "k" "t"
> types
 [1] "random"   "random"   "two back" "random"   "random"   "random"  
 "random"   "two back" "random"   "random"   "two back" "random"   "random"  
[14] "random"   "two back" "random"   "random"   "random"   "random"   "random" 
0 голосов
/ 18 июня 2019

Допустим, вы хотите создать шаблон для одной буквы a. Начните с генерации некоторых букв, используя prob для установки относительной частоты букв:

x <- sample(letters[1:5], 500, prob=c(.01,.09,.2,.3,.3), replace=TRUE)

Теперь вставьте дополнительные буквы, чтобы сделать шаблон с интервалами:

x <- ifelse(x[-1:-3]=="a", "a", x[seq(1,length(x)-3)])

Это помогает?

(чтобы проверить, какие элементы равны a, я использовал which(x == "a"))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...