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

Romain Francois romain at r-enthusiasts.com
Mon Mar 8 18:34:17 CET 2010


Hello,

On 03/08/2010 06:16 PM, 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.

I'd encourage you to use the .Call interface,

> 2, I noticed there is Makevars after I ran Rcpp.package.skeleton,
> do I need modify this file before I run R CMD build?

no

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?

those are examples that we expand to show the kind of code you can 
write. feel free to dump them.

In particular, it shows you how you declare c++ functions to be used by R:
- The RcppExport prevents c++ mangling. see the rationale for this in 
writing R extensions. (RcppExport is just an alias for extern "C")
- The function returns a SEXP (see writing R extensions)
- The function takes zero or more SEXP as input (see writing R extensions)

So I'd suggest you write your function something like this :

RcppExport SEXP tranptest( SEXP filename_, SEXP para_){
	Rcpp::CharacterVector filename( filename_ ) ;
	Rcpp::NumericVector para(para_) ;

	// use filename and para to do whatever you want to do with them
	// return  something
}

> 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?

Again, I suggest you look into the .Call interface and go for something 
like this:

.Call( "tranptest", filenames, params, PACKAGE = "yourpackage" )

> 4, Do I need do anything to run library.dyname to load those complied objects? Where I can make sure it successful and I can use .C("tranptest",....) in R before the wholepackage installed?

Rcpp.package.skeleton adds a useDynLib directive to the NAMESPACE so you 
should be fine.

> Thank you so much!
 >
> 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



More information about the R-devel mailing list