Где хороший учебник по созданию R-пакета с исходным кодом на С++?
Я не понимаю, когда начинаю смотреть скрипты configure. Я не уверен, как сделать создание R-пакета, который имеет несколько функций, построенных на C/С++, таким образом, что он переносится между Windows и Linux. Мои попытки изменить мужество существующих пакетов были бесплодными.
Приветствуется любая помощь или ссылки.
Обновление: Если возможно, я хотел бы указать ссылку:
Boost,
CUDA, &
hwloc
Однако я понимаю, что Boost будет кошмаром, и hwloc не будет намного лучше. Поэтому я бы согласился только на CUDA. Вот почему я сидел в глубине и пытался модифицировать некоторые существующие пакеты в соответствии с моими потребностями (rgl и rglpk). Но я готов начинать без зависимостей и строить с нуля. Спасибо всем за ваши предложения!
Ответы
Ответ 1
Я тоже был потерян при записи моего первого пакета с скомпилированным кодом. Вот несколько советов, но есть, вероятно, лучший материал.
Основная часть написания R-пакетов - "Написание R-расширений". Это очень полное руководство, но это также затрудняет чтение:
http://cran.r-project.org/doc/manuals/R-exts.pdf
Вот небольшой учебник, который я нашел в google, который я использовал вначале, и содержащий как использовать код C: http://www.stat.columbia.edu/~gelman/stuff_for_blog/AlanRPackageTutorial.pdf
Другое руководство по пакетам R в целом, но не с кодом C: http://cran.r-project.org/doc/contrib/Leisch-CreatingPackages.pdf
Rcpp
- очень полезный пакет для кода на С++, но я еще не использовал его еще (на самом деле 3 дня). Он имеет большую документацию в самом пакете.
Ответ 2
Мой подход по умолчанию заключается в том, чтобы узнать, как другие решили проблему. Есть 2800+ CRAN-пакетов, и многие из них существуют уже более десяти лет. Проблема разрешима и решена.
Теперь также верно, что документация есть, но, возможно, слишком много разбросана. Более того, мишени перемещаются. Например, много лет назад мы все еще использовали src/Makefile
, в наши дни это очень рекомендуется, потому что нужно многоархивные сборки (в OS X, Windows и один день также в Linux).
Таким образом, попытка сохранить это просто помогает. На самом деле вы можете иметь действительный проект С++... без каких-либо изменений. Просто отбросьте файлы источников в src/
вашего пакета foo, и R будет знать, как построить libfoo.so
или libfoo.dylib
или..., в зависимости от платформы. И если вам нужны другие файлы заголовков, попробуйте использовать src/Makevars
. Для внешних зависимостей он становится более сложным, и один из них должен учиться autoconf
et al, но многие пакеты катаются с чем-то простым.
Поэтому, пожалуйста, разверните свой вопрос, покажите, что происходит, и документируйте, что вы пробовали. Я уверен, мы сможем вам помочь.
Изменить: И если вы захотите этого с пакетом Rcpp (который поможет с интеграцией R и С++), тогда существует вся виньетка, чтобы сделать это в своем собственном пакете.
Изменить 2: теперь, когда вы расширили свой вопрос, CUDA - совершенно другой зверь. Это сложнее, поскольку вы смешиваете разные компиляторы и т.д. Есть два примера пакетов на CRAN, изучите их.