Создание псевдослучайного списка с помощью r - PullRequest
0 голосов
/ 08 февраля 2019

Учитывая, что у меня есть 4 разных значения

intensities <- c(0.1,-0.1,0.05,-0.05)

Моя цель - случайная выборка каждого значения 5 раз, но положительные и отрицательные значения должны чередоваться, например,

resultList = (0.1, -0.05, 0,05, -0,05, 0,1, -0,1, ...)

Кто-нибудь знает элегантный способ сделать это в R?

Ответы [ 3 ]

0 голосов
/ 08 февраля 2019

Это мое решение, которое создает пользовательскую функцию, а аргумент n означает длину вывода.Кроме того, ceiling() и floor() могут определять длины нечетных и четных позиций.

mySample <- function(x, n){
  res <- c()
  res[seq(1, n, 2)] <- sample(x[x >= 0], ceiling(n / 2), T)
  res[seq(2, n, 2)] <- sample(x[x < 0], floor(n / 2), T)
  return(res)
}

intensities <- c(0.1, -0.1, 0.05, -0.05)
mySample(intensities, 10)
# [1]  0.10 -0.10  0.05 -0.05  0.10 -0.05  0.05 -0.05  0.05 -0.10
0 голосов
/ 08 февраля 2019

Если ваш список интенсивностей, из которых вы производите выборку, состоит из пар +/-, вы можете просто выбрать из списка положительных значений, а затем изменить знак каждого другого нарисованного числа:

N <- 5
positiveIntensities <- c(0.1, 0.05)
resultingList <- sample(positiveIntensities,N,replace = T) * (-1)^(0:(N-1))
0 голосов
/ 08 февраля 2019

Может быть, что-то вроде этого

# seed
set.seed(123)

plus <- rep(intensities[intensities >= 0], each = 5)
minus <- rep(intensities[intensities < 0], each = 5)
out <- numeric(length(plus) + length(minus))
out[seq(1, length(out), 2)] <- sample(plus)
out[seq(2, length(out), 2)] <- sample(minus)
out
# [1]  0.10 -0.05  0.05 -0.10  0.10 -0.05  0.05 -0.05  0.05 -0.10  0.10 -0.05  0.05 -0.05  0.05 -0.10
# [17]  0.10 -0.10  0.10 -0.10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...