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:
#includeApós compilar o código, a invocação no R é quase imediata: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; }
#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)Métodos mais sofisticados usando funções implementadas em R e invocadas em C++ também podem ser utilizadas:
//Usando funções do R: // [[Rcpp::export]] NumericVector ExemploKernel(NumericVector x, NumericVector y, Function f) { NumericVector res = f(x,y); return res; }Método esse que recebe como argumento dois vetores numéricos e uma função bivariada:
#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)
Nenhum comentário:
Postar um comentário