Создание пакета R с использованием кода из файла скрипта - PullRequest
1 голос
/ 11 января 2020

Я написал несколько функций R и поместил их в файл сценария с помощью RStudio. Это кусочки кода, которые я использую снова и снова, поэтому мне интересно, как мне проще всего создать из них пакет R (для моего личного использования).

Я читал различные «как в »руководства онлайн, но они довольно сложные. Кто-нибудь может предложить «руководство идиота» для этого, пожалуйста?

1 Ответ

2 голосов
/ 16 января 2020

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

  • RStudio
  • devtools package (для большинства функций, связанных с созданием пакета)
  • пакет roxygen2 (для документации по roxygen)

Если у вас нет вышеупомянутых пакетов, вы можете установить их с помощью следующих команд:

install.packages("devtools")

install.packages("roxygen2")

Шаги:

(1) Импорт devtools в RStudio с помощью library(devtools).

(devtools - основной пакет, который облегчает создание пакетов R с помощью его инструментов)

(2) Создайте свой пакет, используя:

create_package("~/directory/package_name") для пользовательского каталога.

или

create_package("package_name"), если вы хотите, чтобы ваш пакет создавался в текущем каталоге рабочей области.

(3) Вскоре после выполнения этой функции , это откроет новую сессию RStudio. Вы заметите, что в старом сеансе некоторые строки будут сгенерированы автоматически, что в основном говорит R создать новый пакет с необходимыми компонентами в указанном каталоге.

После этого мы закончили с этим старым экземпляром RStudio. Мы продолжим нашу работу над новым окном сеанса RStudio.

К настоящему моменту процесс создания пакета уже завершен (да, это так просто), однако пакет не может работать напрямую только путем его создания, плюс тот факт, что вам необходимо включить в него функцию, требует некоторых дополнительных аспектов. пакета, такого как его документация (где название функции, параметры, типы возвращаемых данных, примеры и т. д. c, как упоминалось с использованием @param, @return и c - вы будете знакомы, если увидите документацию roxygen, как в некоторых github repositories) и R CMD проверяет, чтобы он заработал.

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

  • В верхнем правом углу нового сеанса RStudio, где вы можете увидеть имя пакета, которое вы создали.

  • Консоль, на которой вы будете увидим, что R создал новый каталог / папку по пути, который мы указали в функции create_package().

  • Панель файлов сеанса RStudio, где вы увидите кучу новых файлов и каталогов в вашем каталоге.

(4) Как вы упомянули в своих словах, вы отбрасываете свои функции в файл скрипта - следовательно, вам сначала нужно будет создать скрипт, что можно сделать с помощью:

use_r("function_name")

В вашей рабочей сессии появится новый R-скрипт, готовый к использованию. Теперь go впереди и напишите в нем свои функции.

(5) После того, как вы закончите, вам нужно загрузить функции, которые вы написали для вашего пакета. Это достигается с помощью функции devtools::load_all().

Когда вы выполните load_all() в консоли, вы узнаете, что функции были загружены в ваш пакет, когда увидите, что Loading package_name отображается в консоли. После этого вы можете попробовать вызвать ваши функции в консоли, чтобы убедиться, что они работают как часть пакета.

(6) Теперь, когда ваша функция была написана и загружена в ваш пакет Настало время перейти к проверкам. Рекомендуется проверять весь пакет, когда мы вносим изменения в наш пакет. Функция devtools::check() предлагает простой способ сделать это.

Попробуйте выполнить check() в консоли, она выполнит go через ряд процедур, проверяя ваш пакет на наличие предупреждений / ошибок и предоставляя подробную информацию для такие же, как сообщения на экране (относящиеся к ошибкам / предупреждениям / примечаниям). Результаты R CMD check в конце будут содержать журналы жизненно важных функций, чтобы вы могли увидеть, какие ошибки и предупреждения вы получили вместе с их частотой.

Если функции в вашем пакете написаны правильно (с учетом дополнительных зависимостей пакета), при выполнении check вы получите два предупреждения:

Первое предупреждение будет касаться лицензии, которая используется ваш пакет, который не указан для нового пакета.

Второй должен быть документом, предупреждающим нас, что наш код не документирован.

Чтобы решить первую проблему, которая является лицензией, используйте команду use_mit_license("license_holder_name") (или любую другую лицензию, которая подходит вашему пакету - но затем для частного использования, как вы упомянули, на самом деле не имеет значения, что вы укажете если только вы собираетесь использовать его или не распространять его) с вашим именем вместо license_holder_name или чем-либо, что соответствует названию лицензии. Это добавит поле лицензии в файл .DESCRIPTION (на панели файлов) и создаст дополнительные файлы, добавив информацию о лицензии.

Также вам нужно будет отредактировать файл .DESCRIPTION, который имеет Пояснительные поля для заполнения или редактирования. Вот пример того, как вы можете это сделать:

Package: Your_package_name
Title: Give a brief title
Version: 1.0.0.0
Authors@R: 
    person(given = "Your_first_name",
           family = "Your_surname/family_name",
           role = c("package_creator", "author"),
           email = "youremailaddress@gmail.com",
           comment = c(ORCID = "YOUR-ORCID-ID"))
Description: Give a brief description considering your package functionality.
License: will be updated with whatever license you provide, the above step will take care of this line.
Encoding: UTF-8
LazyData: true

Чтобы устранить предупреждение о документации, вам нужно будет документировать свою функцию, используя документацию roxygen. Пример:

#' @param a parameter one
#' @param b parameter two
#' @return sum of a and b
#' @export
#'
#' @examples 
#' yourfunction(1,2)
yourfunction <- function(a,b)
{
  sum <- a+b
  return(sum)
}

Следуйте синтаксису roxygen и добавляйте атрибуты по своему усмотрению, некоторые могут быть необязательными, например @title для указания заголовка, в то время как другие, такие как @import, обязательны (обязательны), если ваш импорт из других пакетов, кроме базового R.

После того, как вы закончили документирование ваших функций с использованием скелета Roxygen, мы можем сообщить нашему пакету, что мы задокументировали наши функции, запустив devtools::document(). После выполнения команды document(), выполните check() еще раз, чтобы увидеть, есть ли какие-либо предупреждения. Если вы этого не сделаете, то это значит, что вы хороши для go. (вы не будете, если будете следовать инструкциям)

Наконец, вам нужно установить пакет, чтобы он был доступен для R. Просто используйте команду install() (да, ту же, что вы использовали в начале, за исключением того, что вам не нужно указывать здесь пакет, такой как install("package"), так как вы сейчас работаете в экземпляре, в котором пакет загружен и готов к развертыванию / установке), и вы увидите через несколько строк инструкции по установке типа «Готово (имя_пакета)», которая указывает, что установка нашего пакета завершена.

Теперь вы можете попробовать свою функцию, сначала импортировав свой пакет с помощью library("package_name"), а затем вызвав нужную функцию из пакет. Вот и все, поздравляю, вы сделали это!

Я пытался включить процедуру ясным образом (как я создаю свои пакеты R), но если у вас есть какие-либо сомнения, не стесняйтесь спрашивать.

...