使用R中的自定义函数每次生成不同的随机数

使用R中的自定义函数每次生成不同的随机数,r,R,我正在尝试使用Lehmar随机数生成器生成不同的统一数。我相信我已经这样做了,但是每次执行这个函数时,我都会产生不同的数字。下面是我正在尝试执行的代码,我将进一步解释下面的问题。 MODULUS <- 2147483647 MULTIPLIER <- 48271 put_Seed <- function(x) { x <- (if ( x >


我正在尝试使用Lehmar随机数生成器生成不同的统一数。我相信我已经这样做了,但是每次执行这个函数时,我都会产生不同的数字。下面是我正在尝试执行的代码,我将进一步解释下面的问题。

            MODULUS <- 2147483647
            MULTIPLIER <- 48271

            put_Seed <- function(x)
            {
              x <- (if ( x > 0)
              {
                x%%MODULUS
              }
              else
              {
                1000*as.numeric(Sys.time())
              }
              )
            }

            T_val <- function(Rand)
            {
              Q <- floor(MODULUS / MULTIPLIER)
              R <- MODULUS%%MULTIPLIER;  

              floor(MULTIPLIER*(Rand%%Q) - R*(Rand/Q))
            }  

            New_Random_Seed <- function(T_value_i)
            {
              Random_Seed <- (if (T_value_i > 0)
              {
                T_value_i;
              }
              else
              {
                T_value_i + MODULUS
              })
            }

            Random <- function(New_Seed)
            {
              New_Seed/MODULUS
            }

            uniform_num <- function(a, b, r)
            {
              a + (b - a) * r
            }

            Random_Seed <- put_Seed(123456789)

            uni_num <- function(k)
            {

              Random_Seed <- put_Seed(k)
              T_value <- T_val(Random_Seed)
              Random_Seed <- New_Random_Seed(T_value)
              uniform_num(0, 1, Random(Random_Seed))

            }

            test1 <- uni_num(Random_Seed)
            test2 <- uni_num(Random_Seed)
            test3 <- uni_num(Random_Seed)

#Results
    #test1 = 0.05380306
    #test2 = 0.05380306
    #test3 = 0.05380306
此函数中的模数
p>:

        uni_num <- function(k)
        {

          Random_Seed <- put_Seed(k)
          T_value <- T_val(Random_Seed)
          Random_Seed <- New_Random_Seed(T_value)
          uniform_num(0, 1, Random(Random_Seed))

        }
看起来这是唯一必须修改的赋值,因为
New\u Random\u Seed
返回一个值,并且不需要修改这个全局对象。此外,对
uni_num
中的
Random_Seed
的第一个赋值也可能在函数体环境中


请注意,函数写入全局环境的形式不好。总有更好的办法。但这将适用于您的示例代码。

简短回答:如果每次对输入使用相同的值,请将其更改为
Random\u Seed
,如果该函数返回的是
Sys.time
,那么它只会返回不同的值,而且只有当
x
不是>0更改随机种子时才会发生这种情况。我最初使用6个函数,因为我个人觉得这个问题更容易理解。还有,您将如何使用ifelse函数来解决我的问题。我理解。没有必要重复你自己。我只是再次复制/粘贴了你的代码,只是放了一个负片,它仍然有效。清理你的r会话并在@Matthew Lundberg上再次尝试,你完全正确。我从来都不知道这件事
Random_Seed <<- New_Random_Seed(T_value)