R中的随机子集向量

时间:2017-10-13 20:52:57

标签: r sub-array

有没有办法使用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 个答案:

答案 0 :(得分:0)

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

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

不是100%清楚整个多子阵列的事情,但我的方法是这样的:

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_elements总和等于原始数组中的num_elements?如果是这样,那么它只是一个随机排序问题(非常简单),然后在进入任意数量的子阵列之后将其删除。如果没有,那么你可以事先确定所有子阵列中的元素数量;从原始的这个大小的新矢量中随机抽样;然后将其划分为任意子阵列。