2011-07-20 111 views
0

我想知道如何实现一种方法来获取R中较大样本中的随机子样本,使用大量真正的随机数(使用量子生成器获得),这些样本是可以有多个整数的整数发生。随机抽样

__

编辑:解决方案。

由于我需要一个出让和我的生成的数字中一个float64最终被唯一的(由于高的精度),我已经使用了下列溶液:

1)生成尽可能多的数字作为长度(数据)

2)

temp<-cbind(data,randomnb) 
randomizeddata<-res[order(res[,2])] 

3)拆分数据集

+0

我不知道你的意思是说R的内部随机数发生器不符合你的标准,所以用它来随机选择一个你想象中的伪随机数字的子集会破坏它们的目的。所以,也许你的意思是你想用你预先生成的随机#来生成它自己的一个子集?或者我对此太可爱了? ;) – joran

+1

@delphine:知道为什么伪随机数在这种情况下不好,这将是有趣的。 (R使用Mersenne Twister,这对于大多数用途来说已经足够了;还有其他通过'randtoolbox'软件包提供的出血边缘算法。) –

回答

6

对于真正的随机数,使用randomNumbersrandom包。

r <- randomNumbers(number_of_samples, max = nrow(your_data), col = 1) 
your_data[r, ] 
+0

酷!所以它使用网站random.org,它使用大气噪声来生成数字。很高兴知道! – Tommy

+0

谢谢,这个解决方案是一个很好的解决方案。不过,我会使用另一种解决方案,因为我的随机数字质量更好(生成器在DieHard测试中获得更好的结果),并且我生成的数字最终是唯一的。 – Delphine

0

什么sample功能?

例如

set.seed(3) # just to get the same result 
x <- 1:10 
sample(x,10) 
# print: 2 8 4 3 9 6 1 5 10 7 
+0

如果允许伪随机数,这是最好的选择。 –

+0

@Richie:是的,但你也可以用它来创建另一个数字向量的子集,或者将它们洗牌。这实际上取决于实际OP的需求。他似乎有一个“真正的随机”生成元素的矢量,所以可能sample()甚至是无用的,因为如果它们真的是随机的......为什么不采取它的一部分? :) – digEmAll

1

假设v是您的数据和r是真正的随机数(缩放,使得它们的范围从01):

> v <- runif(100) 
> r <- runif(10) # using psedo-random numbers for demo purposes 
> v[r * length(v) + 1] 

这将选择从v 10个随机元(带替换) 。

+1

因为R中的索引是基于1的,所以你需要添加一个:'v [r * length(v)+ 1]' – Tommy

+0

@Tommy:好的,谢谢!固定。 – NPE

+0

谢谢。我使用了另一种方法,因为当从[0,1]生成float64实数时,我的随机数是唯一的。 – Delphine