【问题标题】:Different results even with set.seed() in R即使在 R 中使用 set.seed() 也会产生不同的结果
【发布时间】:2018-12-13 06:14:58
【问题描述】:

我使用相同的种子重新运行,但在 R studio 中无法产生相同的结果。

set.seed() 在调用不同的用户包、R6 类和方法时会丢失轨迹吗?

您是否遇到过类似的情况以及如何解决?

非常感谢

closeAllConnections()
rm(list=ls())
gc()

set.seed(123456)
require(PackageA)  #user defined package

fileName <- "N:/Risk Management/abc.json";

configuration <- JsonConfigurationReader$readConfiguration(fileName); #R6 class and method in PackageA

instance <- someClass$new(configuration); #R6 class and method in PackageA

instance$execute()  #will produce some random numbers in this method

closeAllConnections()
rm(list=ls())
gc()

【问题讨论】:

  • 不同的包可以使用不同的函数来生成“随机性”,而不是使用内置的 R 方法。究竟如何解决这个问题完全取决于包中的代码。为了进一步帮助您,您需要添加reproducible example
  • 很抱歉,很难包含一个完整的可重现示例,因为一个包调用另一个包等等。但是在不同包中生成随机数的方法只是使用 rnorm、runif 和 mvrnorm。我不明白一开始的 set.seed() 不会修复不同运行的结果。
  • @MrFlick 你说得对,随机性确实取决于功能和包装。我已将函数更改为 mvtnorm::rmvnorm(.., method = "chol") 而不是 MASS::mvrnorm() 使用“eigen”。现在可以使用 set.seed() 重现结果。谢谢。
  • 正如您所评论的,等待,MASS:mvrnorm() 即使使用固定种子也无法重现。有关另一种选择和详细说明,请参阅:rdocumentation.org/packages/rockchalk/versions/1.8.129/topics/…

标签: r random-seed user-defined r6


【解决方案1】:

如果您使用不同的 R 版本(3.5 与 3.6 及更高版本),就会出现问题。 最高 3.5 的版本将显示相同的结果,但对于相同的代码,3.6 版将显示不同的结果。 但是 3.6 和 4.0 版本的结果相同。

【讨论】:

    猜你喜欢
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2017-12-07
    相关资源
    最近更新 更多