如何在R语言中使用future.callr时屏蔽随机数生成相关警告
future.callr随机数警告全局解决方案
两种实现方式(均在脚本开头设置即可,无需逐行修改future代码)
方案1:从根源修复,推荐使用
全局启用并行安全的随机数生成机制,既消除警告,也保证所有future任务的随机数统计可靠、结果可复现,避免潜在的结果有效性问题:
options(future.seed = TRUE)
该配置会让所有future任务默认使用L'Ecuyer-CMRG随机数生成器,符合并行计算的RNG规范,哪怕你用到的第三方数据处理包内部隐式调用了随机数,也能保证结果正确性。
方案2:直接忽略警告
如果你确认不需要关注随机数可靠性,只想屏蔽该警告,全局配置如下即可:
options(future.rng.onMisuse = "ignore")
原有写法不生效的原因
你之前写的future.seed = TRUE只是创建了一个普通变量,没有写入R的全局选项,因此不会被future包识别;将future.rng.onMisuse放在plan()的参数中仅对当前plan生效,切换并行策略后需要重新配置,写在options()中才是全局永久生效的。
修改后的可运行示例
library(future.callr) # 二选一配置即可,放在脚本最开头 options(future.seed = TRUE) # options(future.rng.onMisuse = "ignore") set.seed(1234567) # 普通随机数无问题 a <- runif(1) print(a) plan(callr) b %<-% runif(1) print(b)
内容的提问来源于stack exchange,提问作者Roger-123
相关产品推荐
相关产品推荐

