Compilando e utilizando códigos em C no R

Pessoal esse email é para aqueles que tem dificuldades em compilar um código em C e utilizá-lo no R (principalmente usuários Windows). Tem um pacote (inline) que facilita bastante esse processo e pode ser interessante até para usuários unix. Esse pacote compila o código gerando uma .dll (windows) temporária que depois é carregada no R. O código em C pode ser escrito no próprio script do R (normalmente eu deixo em um arquivo separado .r e quando quero utilizar a função utilizo o source(".r"), então o código é compilado/carregado e a função já fica pronta para uso. Depois de encerrar o R o dll é excluída do sistema. Segue um exemplo. # Exemplo: # Algoritmo que retorna o valor mínimo de um vetor # 1º: utilizando o loop for do R min2 <- function(vetor){ n <- length(vetor) Min <- vetor[1] for(i in 1:(n-1)){ if(Min > vetor[i+1]) Min <- vetor[i+1] } Min } # 2º: utilizando um codigo escrito em C #install.packages("inline", dep = T) require(inline) #--- Compilando a função que encotra o menor valor em um vetor ------------ #--- Só é necessário compilar uma vez -------------------------------------- # Argumentos da função em C sigMin <- signature( vetor="double", n="integer", Min = "double") # Código propriamente dito codeMin <- " *Min = vetor[0]; for (int i=0; i < *n - 1; i++) { if(*Min > vetor[i+1]) *Min = vetor[i+1]; }" # Para compilar a função funcMin <- cfunction(sigMin, codeMin, convention=".C") #--- Fim # apenas para facilitar o uso da função min3 <- function(vetor){ n <- length(vetor) Min <- 0 funcMin(vetor,n,Min)$Min } # Teste: set.seed(1) vec <- runif(1000000) system.time(minimo1 <- min2(vec)) minimo1 system.time(minimo2 <- min3(vec)) minimo2 # Mais exemplos podem ser encotrados no pacote inline. Gustavo Marcatti Eng. Florestal- UFV
participantes (1)
-
Gustavo Marcatti