Нет видимой привязки для глобальной переменной Примечание в R Проверка CMD - PullRequest
39 голосов
/ 11 ноября 2011

Я заметил при проверке пакета, что я получаю примечания «нет видимой привязки для глобальной переменной», когда я использую функции, подобные subset, которые используют дословные имена элементов списка в качестве аргументов.

Например, с даннымиframe:

foo <- data.frame (a = c (TRUE, FALSE, TRUE), b = 1: 3) </p>

Я могу делать глупые вещи, такие как:

subset(foo,a)
transform(foo,a=b)

Который работает как положено.Проверка кода R в R CMD, однако, не понимает, что они относятся к элементам, и жалуется на отсутствие видимых привязок глобальных переменных.

Хотя это работает нормально, мне не очень нравится, когда в моем пакете есть заметки, и я предпочитаю, чтобы он прошел проверку без ошибок, предупреждений и заметок.Я также не очень хочу переделывать свой код слишком сильно.Есть ли способ написать эти коды, чтобы было ясно, что аргументы не относятся к глобальным переменным?

Ответы [ 5 ]

43 голосов
/ 11 ноября 2011

Чтобы преодолеть R CMD check, вы можете:

  • Использовать get("b") (но это обременительно)
  • Поместить a=b=NULL где-то выше в вашей функции (это то, что я делаю)

Некоторое время назад на r-devel была тема, в которой кто-то из r-core в основном сказал (из памяти): "Замечания в порядке, вы знаете. Предполагается, чтоАвтор проверил это и согласен с ПРИМЕЧАНИЕ. "Но я с тобой согласен.Я предпочитаю, чтобы проверки CRAN возвращали чистое «ОК» на всех платформах.Таким образом, у пользователя не остается никаких сомнений в том, что он успешно проходит проверки.

РЕДАКТИРОВАТЬ:

Вот поток r-devel , который я запомнил (с апреля 2010 года),Таким образом, это говорит о том, что в некоторых ситуациях нет известного способа избежать ПРИМЕЧАНИЕ, но это нормально.

17 голосов
/ 11 ноября 2011

Это одно из потенциальных «непредвиденных последствий» использования subset неинтерактивно. Как сказано в разделе Предупреждение ?subset:

Это удобная функция, предназначенная для интерактивного использования. За При программировании лучше использовать стандартные функции поднабора, такие как ‘[’, И в частности нестандартная оценка аргумента «Подмножество» может иметь непредвиденные последствия.

11 голосов
/ 23 июля 2013

Начиная с версии R 2.15.1, есть способ обойти это:

if(getRversion() >= "2.15.1")  utils::globalVariables(c("a", "othervar"))
9 голосов
/ 13 января 2012

В соответствии с разделом предупреждения ?subset лучше использовать подмножество в интерактивном режиме, а [ для программирования.

Я бы заменил команду, подобную

subset(foo,a)

с

foo[foo$a]

или если foo является фреймом данных:

foo[foo$a, ]

, вы также можете использовать with если foo является фреймом данных и вычисляемое выражение является сложным:

with(foo, foo[a, ])

1 голос
/ 02 марта 2019

У меня была эта проблема, и она прослежена до моего раздела ggplot2.

В этом коде указана ошибка:

ggplot2::ggplot(data = spec.df, ggplot2::aes(E.avg, fraction)) +
  ggplot2::geom_line() +
    ggplot2::ggtitle(paste0(title))

Добавление имени данных в параметры исключает:

ggplot2::ggplot(data = spec.df, ggplot2::aes(spec.df$E.avg, spec.df$fraction)) +
  ggplot2::geom_line() +
    ggplot2::ggtitle(paste0(title))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...