Нет видимой привязки для глобальной переменной Примечание в 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, однако, не понимает, что они относятся к элементам и жалуются на отсутствие видимых привязок глобальных переменных.

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

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

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

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

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

Вот т-девеловая нить, которую я помню (с апреля 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, ]

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

with(foo, foo[a, ])

  • Как использовать пользовательские пакеты в golang?
  • Как передать ArrayList из одного действия в другое?
  • MVC4 StyleBundle не разрешает изображения
  • Ошибка при установке пакета R
  • Переопределить функцию, импортированную в пространстве имен
  • Пакет Java не содержит ошибки
  • Как я могу указать явный заказ ScriptBundle?
  • Как создать интеллектуальный пакет Meteor
  • Передача пакета на startActivity ()?
  • Как изменить название пакета Android Project в Eclipse?
  • Как установить пакет R из исходного кода?
  • Interesting Posts

    Проверить количество аргументов, переданных в сценарий Bash

    Как удалить KDE из Ubuntu, если я решил не придерживаться его?

    Добавление нового столбца к каждому элементу в списке таблиц или фреймов данных

    Реверсирование строки с рекурсией в Java

    Предотвратить преобразование значений Excel в даты при открытии файлов HTML

    PostgreSQL: экспортировать полученные данные из SQL-запроса в Excel / CSV

    Зачем перехватывать исключение как ссылку на const?

    Как установить -source 1.7 в Android Studio и Gradle

    Intellij reformat для сохранения файлов

    Использование JSF в качестве технологии просмотра Spring MVC

    Как использовать DrawerLayout для отображения на панели ActionBar / Toolbar и в строке состояния?

    Плагин Phonegap: как преобразовать строку Base64 в PNG-изображение в Android

    csv для массива в d3.js

    Неисправность BIOS HP Pavilion. Не удалось восстановить

    В чем разница между анонимными методами (C # 2.0) и lambda-выражениями (C # 3.0)?

    Давайте будем гением компьютера.