Нет видимой привязки для глобальной переменной Примечание в 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, ])