【问题标题】:How do I stop the same 'random' rows being selected across different computers?如何停止在不同计算机上选择相同的“随机”行?
【发布时间】:2019-08-21 10:39:26
【问题描述】:

我有一些代码需要多次模拟,我希望能在不同的计算机上运行。每个模拟都需要识别数据的随机子集,然后运行分析。当我尝试同时在不同的计算机上运行它时,我注意到每个模拟都选择了相同的行。因此,如果我正在运行 3 次模拟,每个模拟将在不同的计算机上识别相同的“随机”样本。我不确定这是为什么,有人可以建议任何代码来解决这个问题吗?

我在下面的 dplyr 中展示了 sample_n 函数,但是在 Base R 中使用“sample”函数也发生了同样的事情。提前致谢。

library(dplyr)
explanatory <- c(1,2,3,4,3,2,4,5,6,7,8,5,4,3)
response <- c(3,4,5,4,5,6,4,6,7,8,6,10,11,9)

A <- data.frame(explanatory,response)
B <- data.frame(explanatory,response)
C <- data.frame(explanatory,response)

for(i in 1:3)
{
 Rand_A = sample_n(A,8)
 Rand_B = sample_n(B,8)
 Rand_C = sample_n(C,8)
 Rand_All = rbind(Rand_A, Rand_B,Rand_C)
}

【问题讨论】:

  • 您是否在代码的前面部分设置了种子?
  • 不,我目前没有。在模拟之前我需要这样做吗?我该怎么办?
  • 如果你没有设置种子,我觉得很奇怪你选择了相同的行,因为它会使用计算机时钟作为种子。无法解释。你为每台计算机设置不同的种子怎么样?使用:set.seed(123) 设置种子。每次运行的数字不同...
  • 这可能是我几乎同时开始模拟(10 秒内)的原因。 set.seed 可能是一个很好的解释,现在将尝试,谢谢。如果可行,我会推荐并让您在下面回答,以便我打勾
  • 这似乎已经成功了谢谢@brb - 随时在下面发布答案:)

标签: r random sample


【解决方案1】:

您可以按照上面 brb 的建议分别为每台计算机设置种子。您也可以通过将种子设置为计算机的 ip 地址来自动执行此操作,这样就无需为每台计算机编辑脚本。一种使用ipifypackage的实现:

library(devtools)
install_github("gregce/ipify")
library(ipify)

set.seed(as.numeric(gsub("[.]","",get_ip())))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 2019-08-17
    • 2015-06-09
    相关资源
    最近更新 更多