R中的随机子集向量

Randomly subset vector in R

有没有办法使用 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 次是乏味的。我只想要一种快速轻松地为任意数量的子数组赋值的方法。

有什么想法吗?

看你要不要替换(有duplicate/omitted个元素的可能性)。无论如何,这是一个班轮

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吗?如果是这样,那么它只是一个随机排序问题(真的很容易),然后将其切割成任意数量的子数组。如果不是,那么你可以预先固定所有子数组中元素的数量;从原始向量中随机抽取一个这种大小的新向量;然后将其划分为任意子数组。