有没有办法使用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次是很乏味的。我只想快速轻松地为任意数量的子数组分配值。
有什么想法吗?
答案 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?如果是这样,那么它只是一个随机排序问题(非常简单),然后在进入任意数量的子阵列之后将其删除。如果没有,那么你可以事先确定所有子阵列中的元素数量;从原始的这个大小的新矢量中随机抽样;然后将其划分为任意子阵列。