До того, как я решил в конце декабря залить свой пакет lingtypology
в CRAN он себе спокойно жил на GitHub и продолжает жить до сих пор. Несколько моих друзей и студентов его использовали, но в целом фидбека было мало. Поэтому я решил залить его на CRAN, потому что
install.packages("lingtypology")
. Это важно, так как существуют люди, которые стараются не скачивать всякий странный софт с GitHub.Надо сказать, что я пролистал книгу Хадли Викхама, когда делал пакет, но мелочи какие-то пропустил. Да и вообще, кто будет читать все целиком, если уже все получается?
Первое, чего не хватает пакету, это pdf-мануала, который прочитает все описания всех функций и cкомпелирует LaTeXjм все это в один pdf, который должен храниться в папке /inst/doc/manual/
вашего пакета. Почему-то у меня он упорно не хотел компелироваться, так что теперь я делаю это такой строчкой в терминале, а потом сохраняю, куда нужно:
R CMD Rd2pdf путь_к_вашему_пакету
CRAN-ребятки предложили мне выделить все URL-ссылки угловыми скобками в файлу DESCRIPTION
. Знайте, это относиться только к разделу Description, а к разделу URL уже не относиться. Еще они предложили превратить унылый wiki на GitHub в то, что называется vignette. Переделал. Однако я поспешил, потому что почему-то у было ощущение, что надо быстрее-скорее, вызванное, видимо, желанием залить все до Нового Года. В результате виньетка оказалась некрасивой, да и в пакете потом начала появляться ошибка, которая не появлялась раньше. Но я залил. Пакет собрался. И все. Здесь очень важно понимать, что при сборке пакета проверяются только примеры из документации функций, так что некоторые аргументы функций я в примеры не вставил, но вставил в виньетку. Результат: на части машин пакет выдавал предупреждение на этапе построения виньетки.
Ну вот я залил все на CRAN, у меня появилась страница и на ней медленно но верно появлялись бинарники для виндоус и мак, которые собирали добровольцы CRAN на разных машинах. Я грустил, что у меня в пакете ошибка и некрасивая виньетка. Залить новую версию я не могу, так как CRAN policy требует экономить время добровольцев и не коммитить пакеты чаще чем раз в месяц. Я решил привинтить к пакету еще несколько функций, так чтобы в конце января засабмитить новую версию. И сделал в GitHub релиз пакета.
Для того, чтобы сделать GitHub pages я использовал тот же html виньетки, который я клал в корень пакета и называл README.html
. Однако если данный файл лежит в папке во время проверки пакета, то проверка будет выдавать замечания. Я в таких случаях на время проверки лишние файлы убирал, а потом снова клал. Однако потом я обнаружил, что можно написать файл .Rbuildignore
, в котором можно перечислить все лишнее, все, что мне нужно, чтобы R check не видел. Это важно, потому что если пакет закачан на GitHub с лишними файлами, то он с ними же будет скачиваться пользователями, то есть потенциально может вызывать ошибку.
Кроме того, существуют файлы и папки, которые R создает, но которые к пакету не относятся, например, файл .Rproj
или папку .Rproj.user
. Чтобы GitHub не считал, что весь R пакет написан на Java или HTML, нужно добавить файл .gitignore
и записать в него все лишнее.
В R есть функция citation()
, которая по умолчанию выдает ссылку на мануал или на установленные автором записи.
citation("ggplot2")
##
## To cite ggplot2 in publications, please use:
##
## H. Wickham. ggplot2: Elegant Graphics for Data Analysis.
## Springer-Verlag New York, 2009.
##
## A BibTeX entry for LaTeX users is
##
## @Book{,
## author = {Hadley Wickham},
## title = {ggplot2: Elegant Graphics for Data Analysis},
## publisher = {Springer-Verlag New York},
## year = {2009},
## isbn = {978-0-387-98140-6},
## url = {http://ggplot2.org},
## }
Для того, чтобы изменить результат вывода функции citation()
в папку /inst/
нужно добавить файл CITATION
, в котором следует записать все необходимое. Шаблон легко можно найти в интернете.
И последнее, что я решил сделать это завести бейджики в GitHub. Мне очень нравились бейджики, которые видел в других пакетах, хотя и не до конца понимал их назначение. Одни бейджики просто берут информацию откуда-то, например, из CRAN. Так легко получить бейджик с количеством скачиваний, легко сделать бейджик с версией пакета, но бывают другие сервисы, которыми часто пользуются разроботчики R. Я решил использовать Travis, который создает контейнер с системой, R, пакетом и его зависмыми. Все что он делает это проверяет – собирется или нет. Другой сервис codecov.io предоставляет данные о покрытии кода, однако на моем пакете он упорно говорит 0%. Возможно, в ближайшее время я разберусь с ним. А может быть и нет. Все эти стороние сервисы смотрят на коммит в гитхабе и начинают анализровать каждый новый коммит, а потом обновляют бейджик.