<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:10pt"><div style="RIGHT: auto">Pessoal esse email é para aqueles que tem dificuldades em compilar um código em C e utilizá-lo no R (principalmente usuários Windows).</div>
<div style="RIGHT: auto">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 </div>
<div style="RIGHT: auto">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.</div>
<div style="RIGHT: auto"> </div>
<div style="RIGHT: auto"># Exemplo:<BR># Algoritmo que retorna o valor mínimo de um vetor</div>
<div style="RIGHT: auto"># 1º: utilizando o loop for do R<BR>min2 <- function(vetor){<BR>    n <- length(vetor)<BR>    Min <- vetor[1]<BR>    for(i in 1:(n-1)){<BR>        if(Min > vetor[i+1]) Min <- vetor[i+1]<BR>    }<BR>    Min<BR>}</div>
<div style="RIGHT: auto"># 2º: utilizando um codigo escrito em C<BR>#install.packages("inline", dep = T)<BR>require(inline)<BR>#--- Compilando a função que encotra o menor valor em um vetor  ------------<BR>#--- Só é necessário compilar uma vez --------------------------------------</div>
<div style="RIGHT: auto">    # Argumentos da função em C<BR>    sigMin <- signature( vetor="double", n="integer", Min = "double")</div>
<div style="RIGHT: auto">    # Código propriamente dito<BR>    codeMin <- "<BR>      *Min = vetor[0];<BR>          for (int i=0; i < *n - 1; i++) {<BR>              if(*Min > vetor[i+1]) *Min = vetor[i+1];<BR>    }"</div>
<div style="RIGHT: auto">    # Para compilar a função<BR>    funcMin <- cfunction(sigMin, codeMin, convention=".C")</div>
<div style="RIGHT: auto">#--- Fim</div>
<div style="RIGHT: auto"> </div>
<div style="RIGHT: auto"># apenas para facilitar o uso da função<BR>min3 <- function(vetor){<BR>    n <- length(vetor)<BR>    Min <- 0<BR>    funcMin(vetor,n,Min)$Min<BR>}</div>
<div style="RIGHT: auto"> </div>
<div style="RIGHT: auto"># Teste:</div>
<div style="RIGHT: auto">set.seed(1)</div>
<div style="RIGHT: auto">vec <- runif(1000000)</div>
<div style="RIGHT: auto">system.time(minimo1 <- min2(vec))<BR>minimo1</div>
<div style="RIGHT: auto">system.time(minimo2 <- min3(vec))<BR>minimo2</div>
<div style="RIGHT: auto"><VAR id=yui-ie-cursor></VAR> </div>
<div style="RIGHT: auto"># Mais exemplos podem ser encotrados no pacote inline.</div>
<div style="RIGHT: auto"> </div>
<div style="RIGHT: auto">Gustavo Marcatti</div>
<div style="RIGHT: auto">Eng. Florestal- UFV</div>
<div style="RIGHT: auto"> </div></div></body></html>