我有一个这样的R代码。
D1 <- runif(0,1);
D2 <- runif(0,1);
U1 <- runif(0,1);
U2 <- runif(0,1);
但我不希望Ds和Us使用相同的分发!!
我怎么能做出这样的行为?
distrD <- rand(seed1)
distrU <- rand(seed2)
D1 <- distrD.runif(0,1);
D2 <- distrD.runif(0,1);
U1 <- distrU.runif(0,1);
U2 <- distrU.runif(0,1);
distr_D <- rand(seed1)
distr_U <- rand(seed2)
nD1 <- distr_D.runif(0,1);
nU1 <- distr_U.runif(0,1);
nU2 <- distr_U.runif(0,1);
nD2 <- distr_D.runif(0,1);
给出满足以下条件的随机数:
nD1 == D1
nD2 == D2
nU1 == U1
nU2 == U2
我事先不知道每次分发有多少次要求一个新号码。所以我不能将它存储在数组中。
建议?
可能是这样的:
library(rngtools)
Dseeds <- RNGseq(2, seed = 1)
Useeds <- RNGseq(2, seed = 2)
RNGseed(Dseeds[[1]])
D1 <- runif(1, 0, 1)
RNGseed(Dseeds[[2]])
D2 <- runif(1, 0, 1)
RNGseed(Useeds[[1]])
U1 <- runif(1, 0, 1)
RNGseed(Useeds[[2]])
U2 <- runif(1, 0, 1)
RNGseed(Dseeds[[1]])
nD1 <- runif(1, 0, 1)
RNGseed(Useeds[[1]])
nU1 <- runif(1, 0, 1)
RNGseed(Useeds[[2]])
nU2 <- runif(1, 0, 1)
RNGseed(Dseeds[[2]])
nD2 <- runif(1, 0, 1)
nD1 == D1
#[1] TRUE
nD2 == D2
#[1] TRUE
nU1 == U1
#[1] TRUE
nU2 == U2
#[1] TRUE
画出你认为可能需要的尽可能多的种子(可能高估)。如果你需要更多,你可以使用类似RNGseq(n, Dseeds[[2]])[-1]
的东西。
当然,最好绘制两个随机数样本(每次设置种子),并在生成每个样本后存储种子,以便在需要为其中一个样本生成额外随机数时将种子重置为该值。