`.Random.seed`和`ls()`之间是什么关系?

时间:2018-09-18 22:13:44

标签: r jupyter-irkernel

进行load("files.RData"); ls()时,打印到控制台的输出为:

'File1'   'File2'   'File3'

进行(load("files.RData"))时(load()括号中的点表示向R打印该行的输出),打印到控制台的输出为:

'.Random.seed'   'File1'   'File2'   'File3'

问题:造成这种差异的原因是什么?

注意:这可能是特定于IRkernel的代码,因为此代码是在Jupyter笔记本中运行的。

1 个答案:

答案 0 :(得分:3)

help("ls"),我们可以看到all.names的{​​{1}}参数的用途,该参数的默认值为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

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")),但是.Random.seed会自动打印该字符向量,甚至包括(

.Random.seed甚至是什么?

首先,我们通过查看.Random.seed来了解它是什么:

help(".Random.seed")

只要您使用R的伪随机数生成器之一,它就会在您的全局环境中弹出。例如,在全新的R会话中,我可以执行以下操作:

 ‘.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.

然后我可以通过x <- 1 ls(all.names = TRUE) # [1] "x" rnorm(1) # [1] 2.378572 ls(all.names = TRUE) # [1] ".Random.seed" "x" 保存所有这些R对象:

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()开头的文件-根据帮助文件,它是{{ 1}}。

因此,无论您从何处获得.,他们要么使用save(list = ls(all.names = TRUE), file = ".RData", envir = .GlobalEnv),要么在保存files.RData时有意包括其save.image()对象。