我明白set.seed()
不和时,我可能会使用它,但我仍然有关于函数的许多问题。 这里有几个:
- 是否有可能“复位”
set.seed()
的东西“更随意”如果你调用set.seed()
早前在会话? 是,即使有必要吗? - 是否可以查看r是当前使用的种子?
- 有没有一种方法,使
set.seed()
允许字母数字的种子,可以在进入他们的方式random.org (确保你是在先进的模式,并参阅“第3部分”的形式来看看我的意思) ?
我明白set.seed()
不和时,我可能会使用它,但我仍然有关于函数的许多问题。 这里有几个:
set.seed()
的东西“更随意”如果你调用set.seed()
早前在会话? 是,即使有必要吗? set.seed()
允许字母数字的种子,可以在进入他们的方式random.org (确保你是在先进的模式,并参阅“第3部分”的形式来看看我的意思) ? 纯娱乐:
set.seed.alpha <- function(x) {
require("digest")
hexval <- paste0("0x",digest(x,"crc32"))
intval <- type.convert(hexval) %% .Machine$integer.max
set.seed(intval)
}
所以,你可以这样做:
set.seed.alpha("hello world")
(事实上x
可以是任何- [R对象,而不是只是一个字母数字串)
这是可能的,如果你的种子设置为像您的时间划时代的最终数字,但它确实没有必要。 该用途的PRNG的是,你在会议开始时设置的种子一次,并使用从这个连续产生的变元。 做不同的事情,和你没有得到享受的各种良好的理论和实证性质将R的RNG有。
但我不知道你真正了解set.seed的目的。 这是不是真的有你得到“更随机”的数字。 如果你正在做一些类型的应用程序对于其将R PRNG是不够的(例如,如果您需要加密的随机性),你不妨用一些替代的方法生成所有随机数和直接使用它们。 set.seed的真正目的是使用随机数发生器结果产生的重现性。 如果您在使用随机数生成的相同顺序启动相同的分析,并设置种子为相同的值,你总是会得到相同的结果。 这是在调试有帮助,并为他人查看您的结果。
要使用划时代的时间,这样做
t <- as.numeric(Sys.time())
seed <- 1e8 * (t - floor(t))
set.seed(seed); print(seed)
对于你的问题3存在char2seed
在功能TeachingDemos
包将采取的字符串(alhpa数字),并将其转换为整数,并默认使用该设置新的种子。 当时的想法是,学生可以使用他们的姓名(或名称的某种组合/子集)作为种子使每个学生得到不同的数据集,但老师可以再现每个学生的数据集。
对于一个答案2,首先看到的帮助页面?RNGkind
。
要了解所使用的那种RNG的:
RNGkind()
# [1] "Mersenne-Twister" "Inversion"
梅森倍捻机是默认的。
从帮助页面:
“‘梅森捻丝机’:”从松本和Nishimura(1998)。 甲扭曲GFSR具有周期2 ^ 19937 - 1和等分布在连续的623点的尺寸(在整个时间段)。 该“种子”是一个624维的集合32位整数加在该组的当前位置。
为了找到当前正在使用的种子,你需要先调用随机数发生器。
runif(1, 0, 1)
# [1] 0.9834062
.Random.seed
# [Gives a 626 length vector]
调用set.seed(some_integer)
然后.Random.seed
,如果使用相同的总是给出相同的626长度矢量some_integer
。 换种方式,626长度的矢量由书确定some_integer
,给定的一个是使用梅森难题,当然。
此外,当然,跑set.seed
一些固定值会给你跟随它调用随机数程序相同的值。 这是因为它在实践中的主要用途,以得到重现。 例如
set.seed(1)
runif(5, 0, 1)
# [1] 0.2655087 0.3721239 0.5728534 0.9082078 0.2016819
rnorm(1, 0, 1)
# [1] 1.272429
set.seed(1)
runif(5, 0, 1)
# [1] 0.2655087 0.3721239 0.5728534 0.9082078 0.2016819
rnorm(1, 0, 1)
# [1] 1.272429
所有R中的基本数生成的代码是在该文件的src /主/ RNG.c在源代码中。
这是C,但还算容易。
我有同样的问题,因为在问题1,然后我想我可以简单地重置种子在循环方式:
set.seed(123)
x<- rnorm(10,1,1)
set.seed(null)
这样,在每个循环的种子刚刚删除的结束。 它为我工作。