[Rd] for help on building a R package with several R function and a bunch of c, c++

Simon Urbanek simon.urbanek at r-project.org
Mon Mar 8 18:53:06 CET 2010


Alex,

On Mar 8, 2010, at 12:16 , alex46015 at yahoo.com wrote:

> I built R package with only R code before, this is first time I  
> build R package with mixed R code and C, C++ code. I would try Rcpp  
> on our center UNIX, before I ask the administrator to install it, I  
> need confirm several issue are right. Thank you for you patient.
>
> 1, I change main function as a general function with certain name  
> such as void tranptest(char* filename[], double* para[]), and copy  
> this file and other related c, c++  h, program to /src, and removed  
> makefile.
>

Yes, that's perfect - for the kind of usage you don't need Rcpp at all  
- R supports C++ sources out of the box. Just make sure your tranptest  
function is either in a .c file or you put
extern "C"
in front of it if it's in .cpp , e.g:

foo.cpp:
extern "C" void tranptest(char **fn, double *par) {
...
}


> 2, I noticed there is Makevars after I ran Rcpp.package.skeleton,
> do I need modify this file before I run R CMD build? what I need do  
> for  rcpp_hello_world.cpp rcpp_hello_world.cpp? it is template file  
> handled by the program or it is for me to edit it as template?
>
> 3, Do I need write a R function such as tranptest<- 
> function(inputfile, ctlfile,outfile, param1,param2,param3)
> {
> filenames<-c(inputfile,ctlfile,outfile)
> params<-as.vector(c(param1, param2,param3))
> .C("tranptest", as.character(filenames),as.double(params))
> }
> before I run R CMD build? if so, that means I put this R function  
> in /R?
>

yes, in R/foo.R (replace "foo" by any name you want)


> 4, Do I need do anything to run library.dyname to load those  
> complied objects?

If you have a namespace just add
useDynLib(foo)
where "foo" is the name of your package. If you don't have a namespace  
(or don't kwno what that is ;)) just add a file R/zzz.R with the  
following content to your package:
.First.lib <- function(libname, pkgname) library.dynam("foo", pkgname,  
libname)
where "foo" is the name of your package.

> Where I can make sure it successful and I can  
> use .C("tranptest",....) in R before the wholepackage installed?
>

It's really simple - you don't need to install the package to test it.  
Assuming "foo" is the name of your package:
Build the sources:
R CMD SHLIB -o foo.so *.c*

start R in the same directory:
R
# load the library you just compiled
dyn.load("foo.so")
# test your code
.C("tranptest", c("file1", "file2"), as.double(1,2,3,4))

Cheers,
Simon


>
> Alex
> --- On Mon, 3/8/10, Romain Francois <romain at r-enthusiasts.com> wrote:
>
>> From: Romain Francois <romain at r-enthusiasts.com>
>> Subject: Re: [Rd] for help on building a R package with several R  
>> function and a bunch of c, c++
>> To: alex46015 at yahoo.com
>> Cc: r-devel at r-project.org, "Dirk Eddelbuettel" <edd at debian.org>
>> Date: Monday, March 8, 2010, 2:47 AM
>> Hi,
>>
>> Yes, the problem is with spaces in path names. This has
>> been fixed and
>> will appear as Rcpp 0.7.8 in a few days.
>>
>> If you are in a rush, you can build it from svn, or quote
>> the path that
>> is returned from CxxFlags.
>>
>> Feel free to get back to us with more questions, although
>> I'd encourage
>> you to use the dedicated Rcpp-devel mailing list :
>> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
>>
>> Romain
>>
>> On 03/08/2010 04:20 AM, alex46015 at yahoo.com
>> wrote:
>>> Thank you for your help. So far what I did  on
>> my notebook as follows. My OS is windows7.
>>> Â
>>> I downloaded Rcpp windows version, and load
>> library("Rcpp") then.
>>> Â
>>> 1, Change main funnction to f1.cpp, remove makefile.
>>> 2 ,run
>> Rcpp.package.skeleton(name="test",list=c("rec1.R","rect2.R"))
>>> 3, edit  /man, /R, copied my exist file whch I
>> have done sucessfully  without any c++ program
>> before.
>>> 4, copy  f1.cpp and all other related cpp and c
>> into /src/
>>> 5. Rcmd  build --binary test
>>> Â
>>> It showed------
>>> Â
>>> making DLL....
>>> gcc
>> -l“C:/PROGRA~2/R/R-210~1.1/include",“C:/PROGRA~2/R/R-210~1.1/ 
>> bin/Rscript
>> -e' Rcpp:::CxxxFlags<>'` -03 -Wall -std =gnu -999 -c
>> cranbombind.c -o cranbombind.o
>>> Â
>>> gcc.exe: **\Documents/R/win-library/2.10/Rcpp/lib: No
>> such file or directory...
>>>
>>> I checked the path, it did have C:\Users\alex
>> **\Documents\R\win-library\2.10\Rcpp\lib
>>> Â
>>> I don't know how I can fix the problem. do you think
>> it could be problem there is a space between my first name
>> and last name..
>>> Â
>>> All I tried are on my own PC at home , I will tryon
>> other  PC in my office.
>>> Â
>>> Do you have suggestion?. Thanks,
>>> Â
>>> Alex
>>> --- On Sun, 3/7/10, Romain Francois<romain at r-enthusiasts.com>
>> wrote:
>>>
>>>
>>> From: Romain Francois<romain at r-enthusiasts.com>
>>> Subject: Re: [Rd] for help on building a R package
>> with several R function and a bunch of c, c++
>>> To: alex46015 at yahoo.com
>>> Cc: "Dirk Eddelbuettel"<edd at debian.org>,
>> r-devel at r-project.org
>>> Date: Sunday, March 7, 2010, 3:59 AM
>>>
>>>
>>> On 03/06/2010 03:27 AM, alex46015 at yahoo.com
>> wrote:
>>>> I think the first question should be how to build
>> a R function to call a bunch of C ,C++ which include one
>> main program, and a makefile. My goal to build a R package
>> will be next step.
>>>
>>> You should jump straight to making a package. You are
>> making you life
>>> difficult with this "main program&  makefile"
>> model.
>>>
>>> Install Rcpp and try to use the Rcpp.package.skeleton,
>> this will create
>>> a simple package that uses some C++ classes from Rcpp,
>> as well as an R
>>> function that calls them.
>>>
>>>> I read Rcpp , I am not sure ifÂ
>> RcppResultSet can solve my problem or other function. Once I
>> make sure it work I need ask UNIX adminstrator to install
>> it.
>>>
>>> We don't know what your problem is. We can answer a
>> question, but we
>>> cannot guess the question for you.
>>>
>>> Rcpp works, please refer to our unit tests, for
>> example look at this
>>> vignette:
>>> http://cran.r-project.org/web/packages/Rcpp/vignettes/Rcpp-unitTests.pdf
>>>
>>>> I think it shouldn't be very complex,  as I
>> know to build a R function easy with one C function.
>>>>
>>>> Thanks you for yout attention!
>>>>
>>>> Alex
>>>>
>>>> --- On Fri, 3/5/10, Dirk Eddelbuettel<edd at debian.org>> wrote:
>>>>
>>>>
>>>> From: Dirk Eddelbuettel<edd at debian.org>
>>>> Subject: Re: [Rd] for help on building a R package
>> with several R function and a bunch of c, c++
>>>> To: alex46015 at yahoo.com
>>>> Cc: r-devel at r-project.org
>>>> Date: Friday, March 5, 2010, 8:25 PM
>>>>
>>>>
>>>>
>>>> On 5 March 2010 at 13:15, alex46015 at yahoo.com
>> wrote:
>>>> | Hope I can get quick help from here, I have a
>> bunch of c, c++ included main function and makefile. It
>> works well on both UNIX and windows. I tried to build R
>> package which include this C++ program and several other R
>> functions.  These R function here are
>> independent  of c++ code. I prefer to define one R
>> function to call this c++ program (main function).
>>>> |
>>>> | I know how to build R package with just R
>> function, but I don't know how to handle those c++ c code
>> after I copied those  code  in ./src, I am
>> reading manual "Writing R Extensions" , but I did n't catch
>> the key point . Do you know any easy way to do it? ,
>>>>
>>>> When you asked _that exact same question_ this
>> morning on r-help, you got the
>>>> following answer:
>>>>
>>>> Â  Â Â Â From: Whit Armstrong<armstrong.whit at gmail.com>
>>>> Â  Â Â Â To: alex46015 at yahoo.com
>>>> Â  Â Â Â Cc: r-help at r-project.org
>>>> Â  Â Â Â Subject: Re: [R] for help on
>> building a R package with several R function and a bunch of
>> c, c++
>>>> Â  Â Â Â Date: Fri, 5 Mar 2010 10:33:54
>> -0500
>>>>
>>>> Â  Â Â Â Pick up Rcpp, make your life
>> easier.
>>>>
>>>> Â  Â Â Â http://dirk.eddelbuettel.com/code/rcpp.html
>>>>
>>>> Â  Â Â Â -Whit
>>>>
>>>> Â  Â Â Â On Fri, Mar 5, 2010 at 9:19
>> AM,<alex46015 at yahoo.com>> wrote:
>>>> Â  Â Â Â>Â  Hope I can get quick
>> help from here, I have a bunch of c, c++ included main
>> function and makefile. It works well on both UNIX and
>> windows. I tried to build R package which include this C++
>> program and several other R functions.  R function
>> here are independent  c++ code. I prefer to define
>> one R function to call this c++ program.
>>>> Â  Â Â Â>
>>>> Â  Â Â Â>Â  Do you know any easy
>> way to do it? I am reading manual "Writing R Extensions", I
>> didn't catch the key point. I know how to build R package
>> with just R function,  If I put all c++ code and
>> makefile in /src...what I need do?
>>>> Â  Â Â Â>
>>>> Â  Â Â Â>Â  Thank you in
>> advance!
>>>> Â  Â Â Â>
>>>> Â  Â Â Â>Â  Alex
>>>>
>>>> Now, can you let us know
>>>>
>>>> Â  Â  Â  a) what part of the
>> answer was unclear to you, and
>>>>
>>>> Â  Â  Â  b) what made you think
>> you needed to repost _the identical question_ here
>>>>
>>>> | Thank you in advance!
>>>>
>>>> You're welcome.
>>>>
>>>> Dirk
>>
>> -- 
>> Romain Francois
>> Professional R Enthusiast
>> +33(0) 6 28 91 30 30
>> http://romainfrancois.blog.free.fr
>> |- http://tr.im/OIXN : raster images and RImageJ
>> |- http://tr.im/OcQe : Rcpp 0.7.7
>> `- http://tr.im/O1wO : highlight 0.1-5
>>
>>
>
>
>
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list