Não foi possível enviar o arquivo. Será algum problema com as permissões?
Diferenças

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
cursos:rlavras:compilado [2008/11/02 13:22]
paulojus
cursos:rlavras:compilado [2008/11/02 16:30] (atual)
paulojus
Linha 1: Linha 1:
 ====== Interface do R com códigos compilados ====== ====== Interface do R com códigos compilados ======
  
-Códigos escritos e compilados em linguagens ''​C'',​ ''​C++''​ ou ''​Fortran''​ podem ser chamados de dentro do R conforme ilustramos nos exemplos a seguir. Os passos básicos para tal procedimento são: +Nas instruções a seguir os comandos precedidos de ''​$''​ devem ser digidados na linha de comando do Linux (ou análogo em outro sistema operacional),​ e os precedidos por ''>''​ devem ser digitados no R. 
-  - Escrever o código na linguagem desejada (''​C'',​ ''​C++''​ ou ''​Fortran''​) +Os exemplo assumem que todos os arquivos estão no mesmo diretório (pasta) da área de trabalho da sessão do R. 
-  - Compilar o código como o comando ​(linux) <code bash>R CMD SHLIB</​code> ​(No Windows deve-se usar o comando análogo). ​ + 
-  - Carregar o código compilado no R com o comando <code R>​dyn.load()</​code>​ +Códigos escritos e compilados em linguagens ''​C'',​ ''​C + +''​ ou ''​Fortran''​ podem ser chamados de dentro do R conforme ilustramos nos exemplos a seguir. Os passos básicos para tal procedimento são: 
-  - Usar a(s) função(ões) do código compilado com os comandos ​<code R>.C()</​code>​<code R>.Call()</​code> ​ou <code R>.Fortran()</​code>​+  - Escrever o código na linguagem desejada (''​C'',​ ''​C + +''​ ou ''​Fortran''​) 
 +  - Compilar o código como o comando ​do linux (no Windows deve-se usar um comando análogo) <code bash>R CMD SHLIB</​code>​  
 +  - Carregar o código compilado no R com o comando <code R>> dyn.load()</​code>​ 
 +  - Usar a(s) função(ões) do código compilado com os comandos ​''​.C()''​''​.Call()'' ​ou ''​.Fortran()''​
  
 ==== Exemplo 1 ==== ==== Exemplo 1 ====
 Considere escrever uma função em ''​C''​ para calcular valores da função de correlação de Matèrn. Esta função tem como argumento ''​u''​ e parâmetros <​latex>​$(\phi,​ \kappa)$</​latex>​ e é dada pela seguinte expressão:​\\ Considere escrever uma função em ''​C''​ para calcular valores da função de correlação de Matèrn. Esta função tem como argumento ''​u''​ e parâmetros <​latex>​$(\phi,​ \kappa)$</​latex>​ e é dada pela seguinte expressão:​\\
-<​latex>​$\rho(u) = \{2^{\kappa-1} \Gamma(\kappa)\}^{-1} (u/​\phi)^\kappa K_\kappa(u/​\phi).$</​latex>​ +<​latex>​$\rho(u) = \{2^{\kappa-1} \Gamma(\kappa)\}^{-1} (u/​\phi)^\kappa K_\kappa(u/​\phi).$</​latex>​\\ 
-No arquivo {{:​cursos:​rlavras:​clavras01.c|}} encontra-se um código ''​C''​ para calcular valores de uma versão padronizada desta função onde <​latex>​$\phi=1$</​latex>​.+No arquivo {{:​cursos:​rlavras:​clavras01.c|}} encontra-se um código ''​C''​ para calcular valores de uma versão padronizada desta função onde <​latex>​$\phi=1$</​latex>​.\\ 
 +O código ''​C''​ é compilado com:<​code>​$ R CMD SHLIB clavras01.c</​code>​ 
 +Este comando vai gerar um arquivo (biblioteca compartilhada) ''​clavras01.so''​ (''​.so''​ no linux ou ''​.dll''​ no windows) que deve ser carregado na sessão do R com: <code R>> dyn.load("​clavras01.so"​)</​code>​. 
 +Com isto a rotina ''​cormatern''​ definida no código ''​C''​ pode ser chamada na sessão do R como no exemplo a seguir:<​code R>> .C("​cormatern",​ as.integer(10),​ as.double(1:​10),​ as.double(1.5),​ res=as.double(rep(0,​10)))$res</​code>​ 
 + 
 +Complementarmente,​ pode-se definir uma função R que seja um //wrapper// para facilitar a chamada da rotina ''​C''​ <code R> 
 +"​matern"​ <- function(u, kappa){ 
 +  out <- .C("​cormatern",​ as.integer(length(u)),​ as.double(u),​ 
 +            as.double(kappa),​ res = as.double(rep(0,​length(u))))$res 
 +  return(out) 
 +
 + 
 +matern(1:​10,​ kappa=1.5) 
 +</​code>​
  
  
-  * {{:​cursos:​rlavras:​clavras02.c|}} +==== Exemplo 2 ==== 
-  * {{:​cursos:​rlavras:clavras.r|}}+Considere agora uma extensão do exemplo anterior onde temos mais de um arquivo de código. Além do arquivo com código ''​C''​ do exemplo anterior considere também o arquivo ​{{:​cursos:​rlavras:​clavras02.c|}} ​onde mais duas rotinas são definidas. Os dois arquivos são compilados gerando um único arquivo de biblioteca compartilhada com o comando<​code>​$ R CMD SHLIB clavras01.c clavras01.c -o clavras.so</​code>​  
 +Desta forma as três rotinas em ''​C''​ ficam disponíveis no R após carregar a biblioteca compatilhada com <code R>> dyn.load("​clavras.so"​)</​code>​
  

QR Code
QR Code cursos:rlavras:compilado (generated for current page)