关于R中的set.seed()的问题

A5C*_*2T1 20 random r

我理解什么set.seed()做什么以及什么时候可以使用它,但我仍然有很多关于功能的问题.以下是一些:

  1. set.seed()如果您set.seed()之前在会话中打过电话,是否可以"重置" 为"更随机"的内容?这甚至是必要的吗?
  2. 是否可以查看R当前使用的种子?
  3. 有没有办法set.seed()允许字母数字种子,可以在random.org上输入它们的方式(确保你处于高级模式,并看到表格的"第3部分",看看我的意思)?

Ben*_*ker 19

纯娱乐:

set.seed.alpha <- function(x) {
  require("digest")
  hexval <- paste0("0x",digest(x,"crc32"))
  intval <- type.convert(hexval) %% .Machine$integer.max
  set.seed(intval)
}
Run Code Online (Sandbox Code Playgroud)

所以你可以这样做:

set.seed.alpha("hello world")
Run Code Online (Sandbox Code Playgroud)

(实际上x可以是任何R对象,而不仅仅是字母数字字符串)


Fhn*_*oag 15

如果你将种子设置为类似你时间时代的最终数字,这是可能的,但实际上没有必要.PRNG的预期用途是在会话开始时设置一次种子,并使用从中生成的连续变量.做不同的事情,你不会享受R RNG所具有的各种良好的理论和经验属性.

但我不确定你是否真的理解set.seed的目的.你并不是真的可以得到"更随机"的数字.如果您正在进行R PRNG不足的某种应用程序(例如,如果您需要加密随机性),您也可以通过某种替代方法生成所有随机数并直接使用它们.set.seed的真正目的是使用RNG在结果中产生可重复性.如果使用相同的随机数生成序列开始相同的分析,并将种子设置为相同的值,则始终会得到相同的结果.这有助于调试以及其他人查看结果.

要使用纪元时间,请执行类似的操作

t <- as.numeric(Sys.time())
seed <- 1e8 * (t - floor(t))
set.seed(seed); print(seed)
Run Code Online (Sandbox Code Playgroud)

  • 哦好的.好吧,尝试像`as.numeric(Sys.time()) - > t; set.seed((t - floor(t))*1e8 - > seed); print(seed)`对大多数用途都有效. (6认同)
  • FENuzoag应该是答案,而不是评论,IMO. (2认同)

Gre*_*now 7

对于你的问题3 char2seed,TeachingDemos包中的函数将采用字符串(alhpa数字)并将其转换为整数,默认情况下使用它来设置新种子.这个想法是学生可以使用他们的名字(或名称的某些组合/子集)作为种子,这样每个学生都可以获得不同的数据集,但教师可以复制每个学生的数据集.