【发布时间】:2017-09-24 03:02:30
【问题描述】:
是否有一种智能方法可以识别在 R 脚本中的任何位置使用.Random.seed(R 中的随机数生成器状态)的所有函数?
用例:我们有一个不断变化的数据集,记录 [行] 和信息 [列] - 我们经常添加新记录,但我们也会更新某些列中的信息。因此数据集不断变化。我们用插补填充一些缺失的数据,这需要使用sample() 函数生成随机数。因此,每当我们添加新行或更新列中的任何信息时,随机估算的数字都会发生变化——这是意料之中的。我们在每个随机插补开始时使用set.seed(),因此如果一列更改但零行更改,则其他随机生成的列不受影响。
我的印象是,我们整个代码库中唯一接触随机种子的函数是 sample() 函数,但我想以某种方式验证这一点?
编辑:即使是在随机数状态被触及时打印函数调用的东西也会有所帮助,就像debug() 在被调试的函数被触发时出现一样?出于我们的目的,可以假设如果我们运行一次脚本进行动态评估并且没有触发其他随机函数,那么我们是安全的。
谢谢
【问题讨论】:
-
我不得不猜测投反对票的懒人认为您可以进一步简化您的问题。不幸的是,仍然有可能在不提供原因的情况下对问题投反对票。祝你好运!
-
不,根本没有办法。由于 R 是动态评估的,您不能编写静态分析器来全面检查这一点。启发式方法可能会让您接近,但为此构建一个将非常困难。我会说你运气不好。如果您想确保没有任何东西触及随机数生成器的状态,请不要依赖 R,编写一个使用基于
<random>标准标头的生成器的小型 C++ 函数,然后将该函数导入 R。跨度> -
感谢@KonradRudolph,我添加了一个编辑,但如果我误解了某些内容,请见谅..
-
这不是用户友好的,但我唯一能想到的就是在整个脚本中检查
.Random.seed(将结果保存在矩阵或其他东西中)并寻找它何时发生变化。至于代码扫描器/功能检查器,我同意 Konrad 的观点,认为这可能是不可能的。想出病态的例子太容易了。 -
@AnthonyDamico:我注意到您花费了大部分代表。如果您需要“获得奖励”的问题,我很乐意使用我的一些代表给您的问题添加通知。我怀疑你知道我的“真名”。
标签: r random random-seed