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

alex46015 at yahoo.com alex46015 at yahoo.com
Mon Mar 8 21:44:10 CET 2010


Yes! that is what I am looking for. When I post my question, I said I cannot catch the key point in "Writing R Extensions". 

Follow your suggestion, I almost have reached my goal although I passed  the R CMD check mypackage. Before I install it (I need ask UNIX adminstrator to do it), I check the package, I got the information
> dyn.load("tranptest.so")
> filenames<-c("Mrklist.txt","CCdata.txt","outputfile")
> param<-c(1,0,1,0,1,1)
> .C("tranptest",as.character(filenames),as.double(param))

 *** caught segfault ***
address 0, cause 'memory not mapped'

Traceback:
 1: .C("tranptest",as.character(filenames), as.double(param))

Do you have any clue about the error? I think it is very close tothe end.

Thank you so much . You save me a tons of time,

Alex

--- On Mon, 3/8/10, Simon Urbanek <simon.urbanek at r-project.org> wrote:

> From: Simon Urbanek <simon.urbanek at r-project.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: "Romain Francois" <romain at r-enthusiasts.com>, r-devel at r-project.org, "Dirk Eddelbuettel" <edd at debian.org>
> Date: Monday, March 8, 2010, 12:53 PM
> 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