Skip to content

[R-es] Pregunta sobre paquetes portables

4 messages · Carlos J. Gil Bellosta, Guillermo.Vinue en uv.es

#
Hola,

Estoy creando un paquete de R que incluye código C++. Lo he instalado
tanto en Linux (Fedora) como en Windows y todo funciona correctamente.
El código C++ lo cargo desde el NAMESPACE utilizando useDynLib.

Así que ahora estoy revisándolo por última vez antes de someterlo al
CRAN. Lo que pasa es que he leído en 

http://cran.r-project.org/doc/manuals/R-exts.html#Writing-portable-packages 

lo siguiente:

?It is not portable to call compiled code in R or other packages via
Internal, .C, .Fortran, .Call or .External, since such interfaces are
subject to change without notice and will probably result in your code
terminating the R process?.

Sin embargo, la función del paquete que quiero someter llama al código
C++ mediante .Call.

¿Significa esto que no puedo someter el paquete al CRAN porque la
portabilidad del paquete no está asegurada?. De todos modos, ¿alguien
sabe cómo podría llamar al código C++ para que el paquete fuese seguro
portable?.

He escrito también a la lista de R-devel por si me comentaran algo,
en cuyo caso, mandaría un correo a nuestra lista con la información, por
si a alguien le puede servir.

Muchas gracias de antemano.

Saludos,

Guillermo
#
Hola, ¿qué tal?

Creo que ese comentario no se refiere al código compilado de tu
paquete sino a código compilado por otros que quieras usar en tu
paquete. Pero igual me equivoco.

No obstante, en el código de rpart (rpart.R) hay una llamada a C_rpart
(en C) usando .Call. Y se trata de un paquete mantenido por el prof.
Ripley, que ejerce de cancerbero en CRAN.

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com

El día 6 de junio de 2013 16:43,  <Guillermo.Vinue en uv.es> escribió:
#
Hola Carlos,

Muchas gracias por tu respuesta.

Pues sí, le he estado echando un ojo al paquete rpart y como dices, sí
que usa la función .Call y tratándose del profesor Ripley tiene que ser
lo que tú dices.

De momento en la lista R-devel no me han contestado.

Saludos,

Guillermo
http://cran.r-project.org/doc/manuals/R-exts.html#Writing-portable-packages
#
Hola,

Me han contestado muy amablemente también desde la lista R-devel y en
resumen me dicen lo que ya ha comentado Carlos: que el comentario que
leí se refiere sólo a código C de otros paquetes o de la propia
estructura interna de R.

Por lo tanto, sí que es posible utilizar la función .Call para llamar a
código C de tu propio paquete, pero no se recomienda utilizarla para
llamar a código C de otros paquetes o del propio R.

Saludos,

Guillermo
http://cran.r-project.org/doc/manuals/R-exts.html#Writing-portable-packages