Как выглядит типичный цикл Rcpp edit-compile-test? - PullRequest
0 голосов
/ 04 июля 2018

Я могу только найти информацию о том, как установить готовый пакет расширений R, но нигде не упоминается, какие команды должен использовать разработчик пакета расширений во время ежедневной разработки. Я использую Rcpp и использую Windows.

Если бы это был типичный проект C ++, он бы выглядел так:

edit
make  # oops, typo
edit  # fix typo
make  # oops, forgot an #include
edit
make  # good; updates header dependencies for subsequent 'make' automatically
./fooreader  # test it
make install # only now I'm ready

Какие команды мне нужны для ежедневной разработки проекта пакета Rcpp?

Я выделил скелетный проект, используя эти команды из командной строки R:

library(Rcpp)
Rcpp.package.skeleton("FooReader", example_code=FALSE,
         author="My Name", email="my.email@example.com")

Это выделено 3 файла:

DESCRIPTION
NAMESPACE
man/FooReader-package.Rd

Теперь я поместил исходный код в

src/readfoo.cpp

с таким содержанием:

#include <Rcpp.h>

#error here

Я знаю, что могу запустить это из командной строки R:

Rcpp::sourceCpp("D:/Projects/FooReader/src/readfoo.cpp")

(это запускает компилятор и указывает #error). Но в конечном итоге я хочу разработать пакет.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Чтобы протестировать пакет R, его необходимо установить во (временную) библиотеку, чтобы его можно было присоединить к работающему процессу R. Так что вам, как правило, понадобится:

  • R CMD build . для сборки package_version.tar.gz
  • R CMD check <package_version.tar.gz> для проверки вашего пакета, включая тесты, помещенные в папку tests
  • R CMD INSTALL <package_version.tar.gz> для установки в библиотеку

После этого вы можете прикрепить пакет и протестировать его. Довольно часто я пытаюсь использовать более TTD подход, что означает, что мне не нужно INSTALL пакет. Достаточно запустить юнит-тесты (например, через R CMD check).

Все, что не зависит от Rcpp. Для пакета, использующего Rcpp, вам нужно позвонить Rcpp::compileAttributes() перед этими шагами, например, с Rscript -e 'Rcpp::compileAttributes()'.

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

0 голосов
/ 04 июля 2018

Не существует универсального ответа для всех, я думаю.

Для некоторых людей RStudio - это все, и по какой-то причине. Можно использовать средство создания пакета для создания пакета Rcpp, затем редактировать и просто нажимать кнопки (или сочетания клавиш), чтобы скомпилировать, перезагрузить и протестировать.

Я также много работаю над оболочкой, поэтому я довольно много редактирую в Emacs / ESS вместе с R CMD INSTALL (где благодаря ccache происходит немедленная перекомпиляция неизменного кода) с использованием командной строки через r из пакета littler - это позволяет мне писать компактные выражения, загружая новый пакет и оценивая: r -lnewpackage -esomeFunc(somearg) для проверки newpackage::someFunc() с somearg.
Вы также можете запустить сборку и тестирование из Emacs. Как я уже сказал, все зависит.

Оба эти ответа для пакета, где я делаю реальную работу. Когда я просто тестирую что-то в одном файле, я делаю это в одном буфере Emacs и sourceCpp() в сеансе R в другом буфере того же Emacs. Или иногда я редактирую в Emacs и запускаю sourceCpp() в RStudio.

Нет единого ответа. Найдите, что работает для вас.

Кроме того, первая часть вашего вопроса описывает начальную настройку пакета. Это не является частью цикла редактирования / компиляции / ссылки / тестирования, так как он один раз. И для этого у нас также есть различные подходы, многие из которых обсуждались здесь.

Редактировать: Другое основное неправильное понимание вашего вопроса заключается в том, что после получения пакета вы обычно не используете sourceCpp() больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...