R编程:想要生成随机频率

时间:2014-04-17 20:52:25

标签: r random-sample frequency-distribution genetics

我想生成随机频率(即频率必须等于1),以使用R模拟群体中的基因频率。我的解决方案是:

freq<- function(x,y)  #random frequency generator, no defined distribution
    {rn<-sample(1:y,x)
    sum <- sum(rn)
    for(i in 1:x){
    RG[i]=rn[i]/sum}
    return(RG)
    }

关于如何在除法之前将总和约束到特定值(例如随机数必须等于100)的任何建议?

2 个答案:

答案 0 :(得分:1)

也许试试这个:

  1. 从均匀分布生成样本
  2. 排序值
  3. 添加0和1
  4. 使用值作为值的截止点
  5. 这可能不太清楚,所以这是示例!

    set.seed(1)
    x <- sort(runif(10))
    x
    ## [1] 0.06178627 0.20168193 0.26550866 0.37212390 0.57285336 0.62911404 0.66079779 0.89838968 0.90820779 0.94467527
    x <- c(0,x,1)
    y <- diff(x)
    y
    ## [1] 0.061786270 0.139895661 0.063826732 0.106615236 0.200729464 0.056260681 0.031683749 0.237591892 0.009818105 0.036467479 0.055324731
    sum(y)
    ## [1] 1
    

答案 1 :(得分:0)

试试这个:

 freq <- function(x,y)  #random frequency generator, no defined distribution
{ 
  ds <- 50             #desired sum

  # assuming an appropriate range and relation between ds, x and y

  for(i in 1:100) {
    rn0 <- sample(1:y,x-1)  
    if(sum(rn0) < ds) break()
  }

  rn <- c(rn0, ds - sum(rn0))             #desired freq

  sum <- sum(rn)
  RG <- 1:x
  for(i in 1:x){
    RG[i]=rn[i]/sum}
  return(RG)
}