Нет видимой привязки для глобальной переменной Примечание в R CMD check

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

Например, с фреймом данных:

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

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

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

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

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

Ответ 1

Чтобы пройти мимо R CMD check, вы можете:

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

Некоторое время назад на r-devel был поток, где кто-то из r-core в основном говорил (из памяти): "УКАЗАНИЯ в порядке, вы знаете. Предполагается, что автор проверил его и в порядке с NOTE"., Но я согласен с тобой. Я предпочитаю, чтобы проверки CRAN возвращали чистое "ОК" на всех платформах. Таким образом, пользователь не должен сомневаться, что он проходит проверки в порядке.

ИЗМЕНИТЬ:

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

Ответ 2

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

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

Ответ 3

Начиная с версии 2.15.1 R, существует способ:

if(getRversion() >= "2.15.1")  utils::globalVariables(c("a", "othervar"))

Ответ 4

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

Я бы заменил команду вроде

subset(foo,a)

с

foo[foo$a]

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

foo[foo$a, ]

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

with(foo, foo[a, ])