Какая связь между `.Random.seed` и`ls()`?

При выполнении load("files.RData"); ls() вывод на консоль:

'File1'   'File2'   'File3'

При выполнении (load("files.RData")) (точка скобок вокруг load() чтобы указать R, чтобы вывести вывод этой строки), вывод на консоль:

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

Вопрос: В чем причина этой разницы?

Примечание. Это может быть характерно для IRkernel, поскольку этот код выполняется в блокноте Jupyter.

1 ответ

Решение

От 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:

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"):

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

Затем я могу сохранить любой или все эти объекты 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()все в моей глобальной среде сохраняется, даже файлы, начинающиеся с . - в соответствии с файлом справки, это ярлык для save(list = ls(all.names = TRUE), file = ".RData", envir = .GlobalEnv),

Итак, где бы вы ни files.RData от, они либо использовали save.image()или намеренно включили их .Random.seed объект при сохранении files.RData,

Другие вопросы по тегам