Frequentemente é necessário inicializar um NumericVector com algum valor de constante fixo, nesse caso podemos usar a função fill(.):
1 2 3 4 5 6 7 8 9 10 | #include <rcpp.h> using namespace Rcpp; // Função para repetir o valor no vetor // [[Rcpp::export]] NumericVector inicializaVetor( double valor, int tamanho) { NumericVector x(tamanho); x.fill(valor); return x; } </rcpp.h> |
Após compilar o código, a invocação no R é quase imediata:
1 2 3 4 5 6 7 | #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' ) inicializaVetor (2,5) |
O pacote Rcpp tem muitas funcionalidades. Por meio do Rcpp podemos por exemplo, usar funções já implementadas no R, como:
1 2 3 4 5 6 | // [[Rcpp::export]] NumericVector calculaCurtose(NumericVector x) { Rcpp::Environment funcoesPacote( "package:e1071" ); Rcpp::Function funcaoCurtose = funcoesPacote[ "kurtosis" ]; return funcaoCurtose (x); } |
Ou por exemplo, gerar números com a distribuição normal:
1 2 3 4 5 6 | // [[Rcpp::export]] NumericVector geraNormal(){ Rcpp::Environment stats( "package:stats" ); Rcpp::Function rnorm = stats[ "rnorm" ]; return rnorm(10, Rcpp::Named( "sd" , 100.0)); } |
Comandos esses que após compilados são invocados na forma:
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' ) #Executa as funções: x<- rnorm (1919) calculaCurtose (x) geraNormal () |
- push_back(x) - Insere o elemento x no final da lista.
- push_front(x) - Insere o elemento x no início da lista.
- insert(i, x) - Insere o elemento x na posição i.
- erase(i) - Apaga o elemento existente na posição i.
Todas essas funções são dinâmicas e não há a necessidade de criar uma nova lista para que os novos elementos sejam inseridos.