Нет видимой привязки для глобальной переменной Примечание в R Проверка CMD
Я заметил при проверке пакета, что я получаю примечания "нет видимой привязки для глобальной переменной", когда я использую такие функции, как subset
которые используют дословные имена элементов списка в качестве аргументов.
Например, с фреймом данных:
foo <- data.frame (a = c (TRUE, FALSE, TRUE), b = 1: 3)
Я могу делать глупости, такие как:
subset(foo,a)
transform(foo,a=b)
Который работает, как ожидалось. Проверка кода R в R CMD, однако, не понимает, что они относятся к элементам, и жалуется на отсутствие видимых привязок глобальных переменных.
Хотя это работает нормально, мне не очень нравятся записи в моем пакете, и я предпочитаю, чтобы они прошли проверку без ошибок, предупреждений и заметок. Я также не очень хочу переделывать свой код слишком сильно. Есть ли способ написать эти коды, чтобы было ясно, что аргументы не относятся к глобальным переменным?
4 ответа
Чтобы пройти R CMD check
вы также можете:
- использование
get("b")
(но это обременительно) - Место
a=b=NULL
где-то выше в вашей функции (это то, что я делаю)
Некоторое время назад на r-devel возникла нить, в которой кто-то из r-core в основном сказал (из памяти): "Замечания в порядке, вы знаете. Предполагается, что автор проверил это и в порядке с ПРИМЕЧАНИЕ.". Но я с тобой согласен. Я предпочитаю, чтобы проверки CRAN возвращали чистое "ОК" на всех платформах. Таким образом, пользователь не оставляет сомнений в том, что он проходит проверку в порядке.
РЕДАКТИРОВАТЬ:
Вот нить r-devel, которую я запомнил (с апреля 2010 года). Таким образом, это говорит о том, что в некоторых ситуациях нет известного способа избежать ПРИМЕЧАНИЕ, но это нормально.
Это одно из потенциальных "непредвиденных последствий" использования subset
неинтерактивно. Как сказано в разделе "Предупреждение" ?subset
:
Это удобная функция, предназначенная для интерактивного использования. Для программирования лучше использовать стандартные функции поднабора, такие как '[', и, в частности, нестандартная оценка аргумента 'подмножество' может иметь непредвиденные последствия.
Начиная с версии R 2.15.1, есть способ обойти это:
if(getRversion() >= "2.15.1") utils::globalVariables(c("a", "othervar"))
Согласно разделу предупреждения ?subset
лучше использовать подмножество в интерактивном режиме, и [
для программирования.
Я бы заменил команду вроде
subset(foo,a)
с
foo[foo$a]
или если foo является фреймом данных:
foo[foo$a, ]
Вы также можете использовать with
если foo является фреймом данных и вычисляемое выражение является сложным:
with(foo, foo[a, ])
Я имел эту проблему и проследил ее до моего раздела 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))