Значение объектов, замаскированных глобальной средой
Когда я загружаю свой пакет в глобальную среду, я получаю следующее сообщение
> library(saber)
Attaching package: ‘saber’
The following objects are masked _by_ ‘.GlobalEnv’:
load.schedule, teamStats
Я не знаю, что это значит, и не должен ли я беспокоиться об этом.
Почему это сообщение доставляется, и что это значит?
Ответы
Ответ 1
Это означает, что у вас есть объекты (функции, обычно), присутствующие в вашей глобальной среде с тем же именем, что и (экспортированные) вещи в вашем пакете. Введите search()
, чтобы увидеть порядок, в котором R разрешает имена.
Решение должно быть либо:
- не создавать объекты с этими именами в вашей глобальной среде.
- переименуйте объекты в вашем пакете на нечто менее вероятное, чтобы создать конфликт, или переосмыслите свое решение о его экспорте, или
- помните, что вам всегда придется ссылаться на эти объекты как
saber::teamStats
.
Вероятно (2) лучше всего, если обстоятельства, которые привели к сообщению, действительно необычны.
Ответ 2
Это означает, что у вас есть объекты с именем load.schedule
, teamStats
в вашей рабочей области, а также в загружаемой библиотеке. Он предупреждает вас, что когда вы вызываете load.schedule
, он будет использовать тот, который находится в вашей рабочей области (поскольку он первый в пути поиска), а не тот, который вы прикрепляете. Попробуйте, например,
ddply <- function(x) x + 1
library(plyr)
# Attaching package: ‘plyr’
#
# The following object is masked _by_ ‘.GlobalEnv’:
#
# ddply
ddply(3) # the one we just defined is used, as global env is first in the search path
#[1] 4
Ответ 3
Есть третий подразумеваемый вопрос, на который я не думаю, что был полностью отвечен для этого конкретного случая. Как исправить это в ситуации, когда более ранняя версия вашей собственной функции застряла в глобальной среде и маскирует новые версии, которые вы пытаетесь протестировать?
Переименование вашей функции при каждом обороте в этой ситуации нецелесообразно. У меня была такая же ситуация, и я обнаружил, что файл .Rdata в рабочем каталоге до перезапуска R решил проблему.
Это случилось со мной только дважды в сотни раз, когда собирали мои пакеты. Я все еще не уверен, как функции иногда застревают в глобальном масштабе.