使用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)