`.Random.seed` 和 `ls()` 之间有什么关系?
What is the relationship between `.Random.seed` and `ls()`?
执行 load("files.RData"); ls()
时打印到控制台的输出是:
'File1' 'File2' 'File3'
当执行 (load("files.RData"))
时(load()
周围的括号点指示 R 打印该行的输出)打印到控制台的输出是:
'.Random.seed' 'File1' 'File2' 'File3'
问题:造成这种差异的原因是什么?
注意:这可能是 IRkernel 特有的,因为此代码在 Jupyter 笔记本中运行。
从help("ls")
我们可以看出all.names
参数对ls()
的作用,它的默认值为FALSE
:
all.names: a logical value. If ‘TRUE’, all object names are returned.
If ‘FALSE’, names which begin with a ‘.’ are omitted.
因此,在您的第一个示例中,ls()
不会打印 .Random.seed
;它以 .
.
开头
现在让我们考虑 load
帮助文件的 "Value" 部分:
A character vector of the names of objects created, invisibly.
和Paren
:
For ‘(’, the result of evaluating the argument. This has
visibility set, so will auto-print if used at top-level.
因此,在您的第二个示例中,load("files.RData")
无形地 returns "A character vector of the names of objects created"(甚至 .Random.seed
),但是 (
会自动打印该字符向量,甚至包括 .Random.seed
.
.Random.seed
到底是什么?
首先,我们可以通过查看 help(".Random.seed")
:
来了解它 是什么
‘.Random.seed’ is an integer vector, containing the random number
generator (RNG) *state* for random number generation in R. It can
be saved and restored, but should not be altered by the user.
只要您使用 R 的伪随机数生成器之一,它就会在您的全局环境中弹出。例如,在新的 R 会话中,我可以执行以下操作:
x <- 1
ls(all.names = TRUE)
# [1] "x"
rnorm(1)
# [1] 2.378572
ls(all.names = TRUE)
# [1] ".Random.seed" "x"
然后我可以通过 save()
:
保存任何或所有这些 R 对象
save(x, file = "one.RData")
save(.Random.seed, file = "two.RData")
save(x, .Random.seed, file = "all.RData")
# or, equivalently in this case,
# save(list = ls(all.names = TRUE), file = "all.RData")
如果我使用save.image()
,全局环境中的所有内容都会被保存,甚至以.
开头的文件——根据帮助文件,它是save(list = ls(all.names = TRUE), file = ".RData", envir = .GlobalEnv)
.
的快捷方式
所以,无论你从哪里得到 files.RData
,他们要么使用了 save.image()
,要么在保存 files.RData
时故意包含了他们的 .Random.seed
对象。
执行 load("files.RData"); ls()
时打印到控制台的输出是:
'File1' 'File2' 'File3'
当执行 (load("files.RData"))
时(load()
周围的括号点指示 R 打印该行的输出)打印到控制台的输出是:
'.Random.seed' 'File1' 'File2' 'File3'
问题:造成这种差异的原因是什么?
注意:这可能是 IRkernel 特有的,因为此代码在 Jupyter 笔记本中运行。
从help("ls")
我们可以看出all.names
参数对ls()
的作用,它的默认值为FALSE
:
all.names: a logical value. If ‘TRUE’, all object names are returned.
If ‘FALSE’, names which begin with a ‘.’ are omitted.
因此,在您的第一个示例中,ls()
不会打印 .Random.seed
;它以 .
.
现在让我们考虑 load
帮助文件的 "Value" 部分:
A character vector of the names of objects created, invisibly.
和Paren
:
For ‘(’, the result of evaluating the argument. This has
visibility set, so will auto-print if used at top-level.
因此,在您的第二个示例中,load("files.RData")
无形地 returns "A character vector of the names of objects created"(甚至 .Random.seed
),但是 (
会自动打印该字符向量,甚至包括 .Random.seed
.
.Random.seed
到底是什么?
首先,我们可以通过查看 help(".Random.seed")
:
‘.Random.seed’ is an integer vector, containing the random number
generator (RNG) *state* for random number generation in R. It can
be saved and restored, but should not be altered by the user.
只要您使用 R 的伪随机数生成器之一,它就会在您的全局环境中弹出。例如,在新的 R 会话中,我可以执行以下操作:
x <- 1
ls(all.names = TRUE)
# [1] "x"
rnorm(1)
# [1] 2.378572
ls(all.names = TRUE)
# [1] ".Random.seed" "x"
然后我可以通过 save()
:
save(x, file = "one.RData")
save(.Random.seed, file = "two.RData")
save(x, .Random.seed, file = "all.RData")
# or, equivalently in this case,
# save(list = ls(all.names = TRUE), file = "all.RData")
如果我使用save.image()
,全局环境中的所有内容都会被保存,甚至以.
开头的文件——根据帮助文件,它是save(list = ls(all.names = TRUE), file = ".RData", envir = .GlobalEnv)
.
所以,无论你从哪里得到 files.RData
,他们要么使用了 save.image()
,要么在保存 files.RData
时故意包含了他们的 .Random.seed
对象。