R - 绘制随机有序样本
R - Drawing a random ordered sample
在 R 中,我目前有以下代码:
sample(1:15,sample(1:15,1))
这会以随机顺序绘制随机大小的值。但是,对于我的应用程序,顺序必须保持不变。
我不能简单地在每次绘制后对值进行排序,因为这在计算上效率很低。对于我的应用程序,我想从有序值的样本中提取,这将大大减少样本大小,从而减少计算时间。
一些示例:
> 7 9 13 14
> 1 5 6
> 3 4 8 10 11 14 15
> 2
> 2 4 6 8 9
编辑:平局中的每个值也必须是唯一的。
您可以通过遍历您的列表并在每一步中考虑在抽样时选择该值的概率有多大来解决这个问题。这正是这个函数的作用
### Function that will select N values and preserve the order
mySample <- function(values,N){
size <- length(values)
values[sapply(1:size, function(i){
select <- as.logical(rbinom(1,1,N/(size+1-i)))
if(select) N <<- N - 1
select
})]
}
在 R 中,我目前有以下代码:
sample(1:15,sample(1:15,1))
这会以随机顺序绘制随机大小的值。但是,对于我的应用程序,顺序必须保持不变。
我不能简单地在每次绘制后对值进行排序,因为这在计算上效率很低。对于我的应用程序,我想从有序值的样本中提取,这将大大减少样本大小,从而减少计算时间。
一些示例:
> 7 9 13 14
> 1 5 6
> 3 4 8 10 11 14 15
> 2
> 2 4 6 8 9
编辑:平局中的每个值也必须是唯一的。
您可以通过遍历您的列表并在每一步中考虑在抽样时选择该值的概率有多大来解决这个问题。这正是这个函数的作用
### Function that will select N values and preserve the order
mySample <- function(values,N){
size <- length(values)
values[sapply(1:size, function(i){
select <- as.logical(rbinom(1,1,N/(size+1-i)))
if(select) N <<- N - 1
select
})]
}