У меня следующая проблема.
У меня есть несколько подмассивов (скажем, 2), которые я заполнил метками символов (1, 2, 3, 4, 5). Мой алгоритм выбирает метки случайным образом на основе вероятностей появления.
Как я могу заставить R вместо этого выбирать метки 1: 3 для подмассива 1 и 4: 5 для подмассива 2, скажем, без использования подмножества (т. Е. []). То есть я хочу, чтобы для каждого подмассива выбиралось случайное подмножество меток, а не все метки, назначенные каждому подмассиву вручную с помощью [].
Я знаю, что sample() должен помочь.
Используя подмножество (чего я не хочу), можно было бы сделать
x <- 1:5
sample(x[1:3], size, prob = probs[1:3])
но это присваивает метки 1:3 ВСЕМ подмассивам.
Бы
sample(sample(x), size, replace = TRUE, prob = probs)
Работа?
Любые идеи? Пожалуйста, дайте мне знать, если это неясно.
Вот небольшой пример, который выбирает метки 1:5 для каждого из 10 подмассивов.
set.seed(1)
N <- 10
K <- 2
Hstar <- 5
probs <- rep(1/Hstar, Hstar)
perms <- 5
## Set up container(s) to hold the identity of each individual from each permutation ##
num.specs <- ceiling(N / K)
## Create an ID for each haplotype ##
haps <- 1:Hstar
## Assign individuals (N) to each subpopulation (K) ##
specs <- 1:num.specs
## Generate permutations, assume each permutation has N individuals, and sample those individuals' haplotypes from the probabilities ##
gen.perms <- function() {
sample(haps, size = num.specs, replace = TRUE, prob = probs) # I would like each subarray to contain a random subset of 1:5.
}
pop <- array(dim = c(perms, num.specs, K))
for (i in 1:K) {
pop[,, i] <- replicate(perms, gen.perms())
}
pop
Надеюсь, это поможет.
sample(c(x[1:3], y[4:5]), ...)
. - person Roman Luštrik   schedule 09.01.2018