c++ - 我可以像在 C++ 中那样在 R 中拥有多个独立的随机数生成器吗?

标签 c++ r random simulation random-seed

我有许多独立的随机过程(比如到达过程)需要我生成随机数。我想为这些过程中的每一个使用通用随机数,以便我可以比较不同策略在控制这些策略时的执行情况。

我希望进程 A 由生成器 A 管理(使用种子 A) 我希望进程 B 由生成器 B 管理(使用种子 B) ..

等等。

这可以在 R 中实现吗?我找不到任何人做过。我试过了。如果这是一个重复的问题,请原谅我。

谢谢

jack

最佳答案

这是我偶尔想做的事情 - 并且还没有想出比下面的杂凑更好的东西(只有当你只使用 1 或 2 个不同的随机分布时它才真正有用,因为你必须为每个函数编写一个函数:

#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

我想 <<-如果您从另一个函数内部调用 my_runif,将会中断。

fortunes::fortune("<<-")

预计到达时间: 以下可能更稳健

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
}

关于c++ - 我可以像在 C++ 中那样在 R 中拥有多个独立的随机数生成器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22863880/

相关文章:

c++ - C++每次生成相同的随机数

c++ - 将贝塞尔曲线解构为具有等间距斜率的线段

c++ - 无法重载 ofstream 运算符,因为 - 无法绑定(bind)到不相关类型的值(stroustrup c++​​ 第 10 章)

c++ - 返回一个字符指针(内存泄漏)

r - 通过比较 2 个现有列然后删除后者在 R 中的数据框中创建新列

r - 使用 dplyr 跨列求和 NA

python - 对矩阵 python 进行二次采样

c++ - Windows 和 Linux (x86) 上的相同二进制代码

r - 将字符串列表分成多个分区

c# - 使用 ASP.NET C# 生成要在表中使用的随机数