代码之家  ›  专栏  ›  技术社区  ›  compbiostats

R中的随机子集向量

  •  -2
  • compbiostats  · 技术社区  · 7 年前

    有没有办法使用sample()或split()(或两者的组合)将向量元素分配给R中的多个子阵列?

    本质上,我需要的是一个函数,它将值随机分配给多个子阵列

    以下是我的完整具体代码:

    K <- 2 # number of subarrays
    
    N <- 100
    
    Hstar <- 10
    
    perms <- 10000
    
    probs <- rep(1/Hstar, Hstar)
    
    K1 <- c(1:5)
    K2 <- c(6:10)
    
    specs <- 1:N
    
    pop <- array(dim = c(c(perms, N), K))
    
    haps <- as.character(1:Hstar)
    
    
    for(j in 1:perms){
        for(i in 1:K){ 
            if(i == 1){
                pop[j, specs, i] <- sample(haps, size = N, replace = TRUE, prob = probs)
        } else{
                pop[j,, 1] <- sample(haps[K1], size = N, replace = TRUE, prob = probs[K1])
                pop[j,, 2] <- sample(haps[K2], size = N, replace = TRUE, prob = probs[K2])
            }
        }
    }
    

    pop[j,1]是pop中的第一个子阵列,而pop[j,2]是pop中的第二个子阵列

    如果我有20个子数组,使用sample()20次是很乏味的。我只想找到一种方法,可以快速轻松地为任意数量的子阵列赋值。

    1 回复  |  直到 7 年前
        1
  •  0
  •   3pitt    7 年前

    这取决于您是否需要替换(重复/省略元素的可能性)。无论如何,这是一条单行线

    sample(x,length(x),replace=FALSE)
    

    在整个多个子阵列问题上不是百分之百清楚,但我的方法是这样的:

    num.intervals<-5
    interval.size<-length(x)/5 #need to make sure this is evenly divisible I suppose
    arr.master<-rep(NA,0)
    for (i in 1:num.intervals){
        arr.master<-rbind(arr.mater,sample(x,interval.size,replace=TRUE)
    }
    

    基本上,只需采集样本并将其捣碎?这能实现你的目标吗?

    是否希望所有子阵列的num\u元素之和等于原始阵列中的num\u元素?如果是这样,那么这只是一个随机排序问题(非常简单),然后将其分割成任意数量的子阵列。如果没有,那么可以预先确定所有子阵列中元素的数量;从原始样本中随机抽取一个这样大小的新向量;然后将其划分为任意子阵列。