R中的随机数序列发生器具有高级标准

时间:2014-08-05 13:46:54

标签: r random numbers generator

我希望生成一个随机数字序列,其中包含1和1之间的14个数字。 25(含)。我可以使用> sample (1:25, 14)在R中执行此操作。但是,对于某些序列,我需要排除某些数字(2,3,4,5,6,16,21等)。我还需要确保某些数字不在序列的前4个数字内(即1-6,66,21等)。我还需要某些序列,其中某些数字在第5和第14位之间出现两次。

很抱歉,如果不清楚,但我基本上需要R中的随机数序列生成器

  • 包含排除标准
  • 指定某些数字在
  • 中出现的位置
  • 允许某个位置后某个数字在序列中出现两次。

如果有人知道可以做到这一点的功能,我将非常感激。

感谢。

1 个答案:

答案 0 :(得分:3)

此功能可以满足您的需求:

specialSample <- function(yourSample, sampleTimes, exclusion, firstFour, appearTwice){
excludedSample <- yourSample[!yourSample%in%exclusion]
first <- sample(excludedSample,1,prob=excludedSample%in%firstFour)
firstposition <- sample(1:4,1)
second <- sample(excludedSample,1,prob=excludedSample%in%appearTwice)
twice <- c(second,second)
sampler <- sample(excludedSample,sampleTimes-length(exclude),replace=TRUE)
positions <- sample(5:14,2)
result <- sampler
result[firstposition] <- first
result[positions] <- twice
return(result)
}

参数是

yourSample是您正在采样的序列

sampleTimes您的样本中需要多少个值(如果您需要replace=TRUE,我已指定replace=FALSE,那么length(sampleTimes)必须<length(yourSample) < / p>

exclusion是您要排除的数字

firstFour您希望其中一个成为前四个

的数字 您希望在某些随机位置出现两次的

appearTwice个数字

 > numbers <- 1:25
 > exclude <- c(2,4,8)
 > firstFour <- 1:4
 > appearTwice <- c(11,12)

 > test <- specialSample(numbers,25,exclude,firstFour,appearTwice)
!> test
  [1] 12 23  3  9 10 10 21 12  7 17 24 15 22 12  3 14  9  9  1  6 19 15

基本思想是利用向量vec[positionN]<-value的索引和抽样概率来获得所需位置的值。