# Some In/Out examples
This chapter gives some examples of how to pass values from R to cpp and vice versa. There is a high degree of flexibility.
A list can contain different classes of objects. here we want to pass the following list to a C++ function which does nothing else but returning all the objects with a slightly different name in a newly created list.
mylist = list(A = array(1:10,c(10,1)),
a = pi,
b = FALSE,
C = matrix(rnorm(20),4,5))
You can see that have 4 different classes here: a vector, a double, a boolean and a matrix. Let's pass it to C++:
library(Rcpp)
library(inline)
src2 <- '
List l(inlist);
NumericVector one = as<NumericVector>(l["A"]);
double two = as<double>(l["a"]);
bool three = as<bool>(l["b"]);
NumericMatrix four = as<NumericMatrix>(l["C"]);
// do something useful here
// ...
// put together into a list
// notice: if not using the inline package, must declare
// namespace Rcpp, or prepend all Rcpp functions with
// Rcpp::
List outlist = List::create( _["A.out"] = one, _["a.out"] = two, _["b.out"] = three, _["C.out"] = four);
return outlist;
'
f3 <- cxxfunction(signature(inlist="List"),body=src2,plugin="Rcpp")
f3(inlist=mylist)
## $A.out
## [,1]
## [1,] 1
## [2,] 2
## [3,] 3
## [4,] 4
## [5,] 5
## [6,] 6
## [7,] 7
## [8,] 8
## [9,] 9
## [10,] 10
##
## $a.out
## [1] 3.142
##
## $b.out
## [1] FALSE
##
## $C.out
## [,1] [,2] [,3] [,4] [,5]
## [1,] -1.0264 -0.72960 -2.3014 1.1323 -1.4983
## [2,] -1.2078 0.63080 0.4601 0.4494 0.2478
## [3,] 1.3585 0.06326 0.1775 -1.1889 0.6780
## [4,] 0.3557 -0.60087 -0.7089 0.0578 1.0387