Aqui neste post continuaremos com a análise dos possíveis métodos desenvovidos usando Rcpp. O primeiro exemplo trata do uso de matrizes, especificamente, vamos criar uma função para fazer a transposição de uma matriz:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <rcpp.h> using namespace Rcpp; // Função para transposição de matriz // [[Rcpp::export]] NumericMatrix transpose(NumericMatrix x) { //Obtêm o número de linhas e colunas: int nrow = x.nrow(), ncol = x.ncol(); //Cria a matriz com resultado NumericMatrix resultado(ncol,nrow); //Faz a transposição: for ( int i=0;i < nrow; i++){ for ( int j=0;j < ncol; j++){ resultado(j,i)=x(i,j); } } return resultado; } </rcpp.h> |
1 2 3 4 5 6 7 8 9 10 | #Invoca a biblioteca RCpp library (Rcpp) #Define o endereço do arquivo Cpp setwd ( "C:\\Blog\\Source" ) #Compila o código em C++ sourceCpp ( 'Teste.cpp' ) #Cria uma matriz de exemplo mat<- matrix ( c (2,8,9,0,0,0,4,3,2), nrow=3,ncol=3) #Transpoem a matriz transpose (mat) |
1 2 3 4 5 6 | //Usando funções do R: // [[Rcpp::export]] NumericVector ExemploKernel(NumericVector x, NumericVector y, Function f) { NumericVector res = f(x,y); return res; } |
1 2 3 4 5 6 7 8 9 | #Cria uma função no R gaussian<- function (x,y){ return ( sum ((x-y)^2)) } #Gera dois vetores x<- rnorm (1000) y<- rnorm (1000) #Invoca a função em Rcpp: ExemploKernel (x,y,gaussian) |