for help on building a R package with several R function and a bunch of c, c++
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
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