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