Значение объектов, замаскированных глобальной средой

Когда я загружаю свой пакет в глобальную среду, я получаю следующее сообщение

> 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 решил проблему.

Это случилось со мной только дважды в сотни раз, когда собирали мои пакеты. Я все еще не уверен, как функции иногда застревают в глобальном масштабе.