где хороший учебник по созданию пакета R с исходным кодом C++?

Я в недоумении, когда начинаю смотреть на сценарии настройки. Я не уверен, как создать пакет R, который имеет несколько функций, созданных из C/C++, таким образом, чтобы он переносился между Windows и Linux. Мои попытки модифицировать внутренности существующих пакетов оказались безрезультатными.

Будем признательны за любую помощь или ссылки.

Обновление: Если возможно, я хотел бы сделать ссылку на: Boost, CUDA и hwloc

Однако я понимаю, что Boost будет кошмаром, а hwloc не намного лучше. Так что я бы согласился только на CUDA. Вот почему я углубился и попытался изменить некоторые существующие пакеты в соответствии со своими потребностями (rgl и rglpk). Но я готов начать без зависимостей и строить с нуля. Спасибо всем за ваши предложения!!


person M. Tibbits    schedule 02.03.2011    source источник
comment
Было бы полезно, если бы вы могли сказать нам, что не так в руководствах, поставляемых с вашей установкой R.   -  person Joshua Ulrich    schedule 02.03.2011
comment
Я прочитал Написание расширений R. Я довольно быстро теряюсь в разделе 1.2. В моем коде C++ есть Makefile, но он не переносим. Поэтому я хотел бы использовать Makevars.in и настроить функциональность, но я не уверен, как действовать дальше. Есть ли где-нибудь понятный пример, скажем, с двумя исходными файлами C++, тремя файлами заголовков и R-кодом, который все упакован в пакет R?   -  person M. Tibbits    schedule 02.03.2011
comment
Обычно скрипт configure необходим только в том случае, если вы подключаетесь к внешней библиотеке, не предоставленной R. Если вы делаете это, было бы полезно сообщить нам, какие внешние библиотеки вы пытаетесь использовать.   -  person Sharpie    schedule 02.03.2011


Ответы (2)


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

Основная часть о написании пакетов 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 — очень полезный пакет для кода на C++, но я пока мало им пользовался (фактически 3 дня). Он имеет много документации в самом пакете.

person Sacha Epskamp    schedule 02.03.2011
comment
Это также было полезно: biostat.jhsph.edu/~rpeng/docs/ интерфейс.pdf - person MichaelChirico; 22.03.2016

Мой подход по умолчанию — узнать, как другие решили проблему. Существует более 2800 пакетов CRAN, и многие из них существуют уже более десяти лет. Проблема решаемая, и она была решена.

Теперь верно и то, что документация есть, но, возможно, слишком разбросана. Более того, цели меняются. Например, несколько лет назад мы все еще использовали src/Makefile, в наши дни это очень рекомендуется против из-за необходимости мультиархивных сборок (в OS X, в Windows, а однажды и в Linux).

Поэтому попытка сохранить простоту помогает. На самом деле у вас может быть действующий проект C++... без всего. Просто поместите исходные файлы в src/ вашего пакета foo, и R будет знать, как собрать libfoo.so или libfoo.dylib или ..., в зависимости от платформы. И если вам нужны другие заголовочные файлы, попробуйте использовать src/Makevars. Для внешних зависимостей это становится сложнее, и это то, что нужно изучить autoconf и др., но многие пакеты скользят мимо с чем-то простым.

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

Редактировать: И если вы хотите сделать это с помощью пакета Rcpp (который помогает с интеграции R и C++), то есть целая виньетка о том, как сделать это в вашем собственном пакете .

Редактировать 2: Теперь, когда вы расширили свой вопрос, CUDA — это совершенно другой зверь. Это сложнее, так как вы смешиваете разные компиляторы и т. д. На CRAN есть два примера пакетов, изучите их.

person Dirk Eddelbuettel    schedule 02.03.2011
comment
Если я хочу обернуть свой код C++ функциями C, тогда мне не нужно будет использовать Rcpp, не так ли? - person M. Tibbits; 02.03.2011
comment
Нет, но Rcpp здесь, чтобы помогать, а не мешать. Многие из нас считают, что это облегчает задачу, освобождая вас от необходимости писать повторяющиеся оболочки. Посмотрите на некоторые примеры, может вам понравится. Но повторюсь: вам не нужен src/Makevars, если ваш проект простой, и вам не нужно использовать Rcpp. Но некоторые из нас думают, что это помогает :) - person Dirk Eddelbuettel; 02.03.2011
comment
Большое спасибо за понимание! Я проверю это. - person M. Tibbits; 03.03.2011
comment
Извините, Дирк, не могли бы вы указать, на какие два пакета в CRAN вы ссылались? - person natorro; 07.08.2013