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

Другие вопросы по тегам