[Rcpp-devel] How to put the code 2013-01-05-r-function-from-c++.cpp in the src/ directory of a package?

Dirk Eddelbuettel edd at debian.org
Sat May 25 15:23:34 CEST 2013


On 25 May 2013 at 06:50, Peng Yu wrote:
| Hi Dirk,
| 
| Here is what I got. Note that I have to used .Call and change the
| arguments to the cpp function as SEXP and convert them to Function and
| NumericVector inside the cpp function.
| 
| But the example 2013-01-05-r-function-from-c++.cpp takes Function and
| NumericVector as arguments directly. This calling syntax can not be
| used in src/? In this case, does .Call have to be used in R/ (if
| cppFunction is used then .Primitive rather than .Call is used)?

Try   sourceCpp("somefile.cpp",  verbose=TRUE)   to see how the examples
using Rcpp Attributes add an additional layer that deal with .Call and SEXP
arguments.

For your questions regarding .Call, consider the available documentation in
"Writing R Extensions", in our Rcpp documentation and in other material
covering R programming.

Dirk


| > callFunction
| function (x, f)
| .Primitive(".Call")(<pointer: 0x103c73120>, x, f)
| 
| /tmp/testFunction$ cat R/rcpp_hello_world.R
| rcpp_hello_world_R=function(f, x){
|   .Call(rcpp_hello_world, f, x)
| }
| 
| /tmp/testFunction$ cat src/rcpp_hello_world.cpp
| #include "rcpp_hello_world.h"
| 
| SEXP rcpp_hello_world(
| 		SEXP f
| 		, SEXP x
| 		){
| 	using namespace Rcpp;
| 
| 	Function ff(f);
| 	NumericVector xx(x);
| 	NumericVector res = ff(xx);
| 
| 	return res;
| }
| 
| On Fri, May 24, 2013 at 8:44 AM, Dirk Eddelbuettel <edd at debian.org> wrote:
| >
| > On 24 May 2013 at 08:25, Peng Yu wrote:
| > | > Stick callFunction() in that package.
| > |
| > | I have read the documents that you mentioned and I'm able to put other
| > | functions in a package. The difference for "callFunction" is that it
| > | takes Function as an argument so I'm not able to get the code work in
| > | cxxfunction. Is there an exampling using cxxfunction (rather than the
| > | sourceCpp and cppFunction examples given by Xiao) for
| > | 2013-01-05-r-function-from-c++.cpp? Once I have a working example with
| > | cxxfunction, I then should be able to put it in a package.
| >
| > Read the _basic_ Rcpp documentation and learn about the Function class. There
| > is nothing special here. Here is a basic example:
| >
| > R> cppFunction('NumericVector applyFunction(Function f, NumericVector x) { return f(x); }')
| > R> applyFunction(log, 1:10)
| >  [1] 0.000000 0.693147 1.098612 1.386294 1.609438 1.791759 1.945910 2.079442 2.197225 2.302585
| > R> applyFunction(sqrt, 1:10)
| >  [1] 1.00000 1.41421 1.73205 2.00000 2.23607 2.44949 2.64575 2.82843 3.00000 3.16228
| > R>
| >
| > Dirk
| >
| > --
| > Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
| 
| 
| 
| -- 
| Regards,
| Peng

-- 
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com


More information about the Rcpp-devel mailing list