2011-03-02 8 views
28

Me siento perdido cuando empiezo a buscar secuencias de comandos de configuración. No estoy seguro de cómo crear un paquete R que tenga varias funciones compiladas desde C/C++ de tal manera que sea portátil entre Windows & Linux. Mis intentos de modificar las agallas de los paquetes existentes han sido infructuosos.¿dónde está un buen tutorial sobre cómo crear un paquete R con código fuente C++?

Cualquier ayuda o enlace sería muy apreciado.

Actualización: Si posible me gustaría enlazar con: Boost, CUDA, & hwloc

Sin embargo, soy consciente de que Boost será una pesadilla hwloc & no será mucho mejor . Entonces me conformaría con CUDA. Esta fue la razón por la que me sumergí en el extremo e intenté modificar algunos paquetes existentes para satisfacer mis necesidades (rgl & rglpk). Pero estoy dispuesto a comenzar sin dependencias y construir desde cero. ¡Gracias a todos por sus sugerencias!

+1

Sería útil si pudieras decirnos qué es insuficiente acerca de los manuales que vienen con tu instalación R. –

+2

He leído "Escribir extensiones R". Me pierdo bastante rápido en la Sección 1.2. Mi código C++ tiene un archivo Makefile, pero no es portátil. Entonces, me gustaría utilizar Makevars.in y configurar la funcionalidad, pero no estoy seguro de cómo proceder. ¿Hay algún ejemplo fácilmente comprensible en alguna parte con, por ejemplo, dos archivos fuente C++, tres archivos de encabezado y un código R que esté incluido en un paquete R? –

+0

Por lo general, una secuencia de comandos de configuración solo es necesaria si está enlazando con una biblioteca externa no proporcionada por R. Si lo hace, sería útil que nos informe qué bibliotecas externas está tratando de usar. – Sharpie

Respuesta

22

También me perdí al escribir mi primer paquete con código compilado. Aquí hay algunos consejos, pero probablemente haya mejor material por ahí.

La pieza principal sobre cómo escribir paquetes R es "Escribir extensiones R". Esta es una guía muy completa, pero que también hace que sea abit difícil de leer a través de: http://cran.r-project.org/doc/manuals/R-exts.pdf

Aquí es un pequeño tutorial que encontré en Google una vez que utilicé en primer lugar, que contiene cómo utilizar el código C: http://www.stat.columbia.edu/~gelman/stuff_for_blog/AlanRPackageTutorial.pdf

Otra guía de R paquetes en general, pero no con el código C: http://cran.r-project.org/doc/contrib/Leisch-CreatingPackages.pdf

Rcpp es un paquete muy útil para el código C++, pero no he usado mucho todavía (3 días, de hecho). Tiene mucha documentación en el paquete en sí.

+0

Esto también ha sido útil: http://www.biostat.jhsph.edu/~rpeng/docs/interface.pdf – MichaelChirico

15

Mi enfoque predeterminado es aprender cómo otros han resuelto el problema. Hay más de 2800 paquetes CRAN, y muchos llevan allí más de una década. El problema se puede resolver y se ha resuelto.

Ahora, también es cierto que la documentación está allí, pero tal vez esparcida demasiado. Por otra parte, los objetivos cambian. Por ejemplo, hace años, todavía usábamos src/Makefile, en la actualidad es muy recomendable en comparación con debido a la necesidad de compilaciones multiarch (en OS X, en Windows, y un día también en Linux).

Así que intentar mantenerlo simple ayuda. De hecho, puede tener un proyecto de C++ válido ... sin nada. Simplemente suelte los archivos de fuentes en src/ de su paquete foo, y R sabrá cómo compilar libfoo.so o libfoo.dylib o ..., dependiendo de la plataforma. Y si necesita otros archivos de encabezado, intente con src/Makevars. Para las dependencias externas se vuelve más complicado y uno que tiene que aprender autoconf y otros, pero muchos paquetes pasan con algo simple.

Por favor, expanda su pregunta, muestre lo que está fallando y documente lo que ha intentado. Estoy seguro de que podemos ayudarte.

Editar: Y en caso de que quiera esto con el Rcpp paquete (que ayudan a la integración con R y C++), entonces no es un entire vignette about to do this in your own package.

Editar 2: Ahora que ha ampliado su pregunta, CUDA es una bestia completamente diferente. Eso es más difícil a medida que mezclas diferentes compiladores, etc. pp. Hay dos paquetes de ejemplos en CRAN, estudia esos.

+0

Si estoy dispuesto a ajustar mi código C++ con las funciones C, entonces no necesitaría usar Rcpp, ¿verdad? –

+0

No, pero Rcpp está aquí para ayudar en lugar de obstaculizar. Muchos de nosotros sentimos que hace las cosas más fáciles al * liberarlo de tener que escribir envoltorios repetitivos *. Mira algunos de los ejemplos, te puede gustar. Pero para reiterar: no necesita * src/Makevars' si su proyecto es simple, y * no * tiene que usar Rcpp. Pero algunos de nosotros piensan que ayuda :) –

+0

¡Muchas gracias por la información! Lo comprobaré. –

Cuestiones relacionadas