В R можно ли подавить Примечание: нет видимой привязки для глобальной переменной?

Мне интересно, можно ли подавить эти выходные данные в R, которые загромождают консоль:

Note: no visible binding for global variable '.->ConfigString' 
Note: no visible binding for '<<-' assignment to 'ConfigString' 

Вот код (это простой ReferenceClass для хранения конфигурации проекта R):

# Reference Class to store configuration
Config <- setRefClass("Config",
  fields = list(    
    ConfigString = "character"
    ),
    methods = list(
        # Constructor
        initialize = function() {
            ConfigString <<- "Hello, World!"
        }
  )
)

Что я уже пробовал

Я когда-либо пробовал комбинацию и перестановку предопределения переменных, предварительно устанавливая их в нуль и т. д., но R все еще упрямо печатает сотни заметок «Нет видимой привязки» в моем исходном коде.

Кто-нибудь мудрее меня, когда дело доходит до внутренностей R?

Обновление 1

Я попытался изменить Config <- на Config <<-, и это избавило меня от второго постороннего примечания. Однако первая посторонняя нота все же присутствует.

Обновление 2

Я начинаю падать духом, даже пример кода Джона Чемберса генерирует больше этих ужасных, посторонних нот.

Обновление 3

Эти примечания встречаются в Revolution R v7.0, но не встречаются в RStudio. Похоже, что Revolution R v7.0 вызывает R CMD check, который обычно используется только при подготовке пакетов, поэтому эти примечания можно смело игнорировать.

Обновление 4

Хэдли Уикхэмс код также генерирует эти заметки. По-видимому, их можно устранить с помощью utils::globalVariables, однако это, похоже, не работает с более новыми ReferenceClasses. Даже если бы их вообще можно было использовать, Хэдли утверждает:

globalVariables — отвратительный хак, и я никогда не буду его использовать.


person Contango    schedule 05.05.2014    source источник
comment
Вы видели это?   -  person joran    schedule 05.05.2014
comment
Если бы вы прочитали то, на что я ссылаюсь, вы бы не назвали это ужасными, посторонними ошибками. Ужасно, наверное. Посторонний, точно. Ошибки? Даже не близко.   -  person joran    schedule 05.05.2014
comment
@joran Вы правы, я изменил ошибку на примечание.   -  person Contango    schedule 05.05.2014
comment
Добавление чего-то вроде ConfigString <- NULL прямо в начало функции (до того, как вы используете эти переменные) также приводит к исчезновению примечаний.   -  person Tyler Rinker    schedule 05.05.2014
comment
@Tyler Rinker Вы правы, это решило проблему. Я добавил ответ ниже, я бы хотел, чтобы ваш ответ получил 10 голосов!   -  person Contango    schedule 05.05.2014


Ответы (2)


Все заслуги @Tyler Rinker за этот ответ.

Чтобы устранить эти примечания, добавьте к исходному коду префикс:

# Intent:
#   This function suppresses the following notes generated by "R CMD check":
#   - "Note: no visible binding for global variable '.->ConfigString'"
#   - "Note: no visible binding for '<<-' assignment to 'ConfigString'"
# Usage:
#   Add the following right in the beginning of the .r file (before the Reference
#   class is defined in the sourced .r file):
#   suppressBindingNotes(c(".->ConfigString","ConfigString"))
suppressBindingNotes <- function(variablesMentionedInNotes) {
    for(variable in variablesMentionedInNotes) {
        assign(variable,NULL, envir = .GlobalEnv)       
    }
}

suppressBindingNotes(c(".->ConfigString","ConfigString"))

Кроме того, иногда может потребоваться перезапуск Revolution R, если он работает в течение длительного времени.

person Community    schedule 05.05.2014
comment
Это менее отвратительно, чем использование utils::globalVariables? - person F. Privé; 25.08.2017

Вы можете попробовать эту команду.

компилятор:: setCompilerOptions (suppressAll = TRUE)

Это работает для меня, чтобы подавить сообщения, такие как

Примечание: нет видимой привязки для глобальной переменной ...
Примечание: нет видимой привязки для определения глобальной функции ...

person Sean Huang    schedule 12.06.2017