To jest coś, co ja chciałem zrobić od czasu do czasu - i jeszcze nie wymyślić wiele lepiej niż w następnym kludge (co jest bardzo przydatne, jeśli tylko jesteś używając tylko 1 lub 2 różnych rozkładów losowych, jak trzeba napisać funkcję dla każdego.
#Make a list of seeds - generalises to mkore than 2
seed <- list(NA,NA)
set.seed(1)
seed[[1]] <- .Random.seed
set.seed(2)
seed[[2]] <- .Random.seed
my_runif <- function(...,which.seed=1)
{
.Random.seed <<- seed[[which.seed]]
x <-runif(...)
seed[[which.seed]] <<- .Random.seed
x
}
##Print some data for comparison
> set.seed(1); runif(10)
[1] 0.26550866 0.37212390 0.57285336 0.90820779 0.20168193 0.89838968 0.94467527 0.66079779 0.629114040.06178627
> set.seed(2); runif(10)
[1] 0.1848823 0.7023740 0.5733263 0.1680519 0.9438393 0.9434750 0.1291590 0.8334488 0.4680185 0.5499837
#Test
> my_runif(1,which.seed=1)
[1] 0.2655087
> my_runif(1,which.seed=1)
[1] 0.3721239
> my_runif(1,which.seed=1)
[1] 0.5728534
> my_runif(1,which.seed=2)
[1] 0.1848823
> my_runif(1,which.seed=1)
[1] 0.9082078
bym sobie wyobrazić, że <<-
pęknie jeśli zadzwonisz my_runif od wewnątrz innej funkcji
fortunes::fortune("<<-")
ETA: Poniższy może być bardziej wytrzymałe
my_runif <- function(...,which.seed=1)
{
assign(".Random.seed", seed[[which.seed]], envir = .GlobalEnv)
x <-runif(...)
seed <- seed #Bring into local envir
seed[[which.seed]] <- .Random.seed
assign("seed", seed, envir = .GlobalEnv)
x
}
Obsługa C++ 11 w kompilatorze? – Yakk
Dlaczego nie wygenerujesz wszystkich liczb losowych za pomocą różnych nasion? A i B mogą mieć zasady wyboru liczb z wygenerowanego zbioru bez powtórzeń (nieparzyste/równomierne indeksy, gdy kurs ma jedno nasiono i wyrównuje kolejność, kolejność itd.). Kiedy zabraknie liczb, jeśli to jest problem, wygeneruj więcej. – mockinterface
Myślę, że to najlepsze podejście, jakie mam. Może być nieefektywne, że generuję i przechowuję o wiele więcej liczb, niż kiedykolwiek będę musiał użyć, ale jeśli nie ma sposobu na "kilka niezależnych stosów" liczb losowych w ofercie, będę musiał pomyśleć o sprytnej implementacji sugestii mockinterface . Dziękuję za szybkie odpowiedzi. –