【发布时间】: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