[R-br] RES: [Dúvida] Invocar funções C++ no R
Cesar Rabak
cesar.rabak em gmail.com
Sexta Agosto 26 21:44:07 BRT 2011
Em 26/8/2011 20:35, Leandro Marino escreveu:
Leandro,
> /Pedro,
>
> em geral quando você tem vários FOR aninhados você pode substituí-los
> por sapply, lapply ou genéricos. Cada caso é um caso e deve ser avaliado
> com cuidado.
Esse é o famoso caso em que "só aprende a desfrutar da juventude quando
já se está velho demais".
Se somente após rodar as duas formas ter-se-á certeza, mas aí já se tem
resultados, e como você mesmo escreve cada caso é um caso, então a
solução não ajuda em casos em que se tenha que repetir a análise com
dados diferentes....
>
> Particularmente, pretendo desenvolver em C um conjunto de funções
> antigas do Prof. Ruben que rodam em FORTRAN (apenas em compiladores mais
> antigos) para que possamos usá-las dentro do R, ganhando um precioso
> tempo, entre exportar, rodar e importar os dados novamente.
Tecnicamente você vai _portar_ o conjunto de funções antigas, supondo
que os algoritmos serão os mesmos e que você disponha de dados (de
entrada) e resultados já conhecidos para efetuar testes.
Ainda assim, vale a pena alertá-lo que esse porte pode exigir mais que
somente tradução do código de Fortran para C (que por sinal pode ser
automatizado, em parte, usando um programa denominado f2c):
O Fortran e o C têm "expectativas" diferentes quanto à organização de
matrizes
(http://stackoverflow.com/questions/227627/fortran-array-to-c-array-stupid-macro-tricks-wanted)
Os arrays em Fortran começam a partir de um enquanto em C a partir de
zero. Como em programação matemática a forma do Fortran faz mais sentido
existem até propostas de "jambrar" o código em C para "emualar" esse
tipo de programação (Numerical Recipes in C, 2ª edição, pg 18 [versão
considerada "obsoleta" disponível p/consulta em
http://apps.nrbook.com/c/index.html) que os especialistas em C deprecam
(http://c-faq.com/aryptr/non0based.html).
Há ainda que tomar cuidado com tipos (conversão). . .
HTH
--
Cesar Rabak
GNU/Linux User 52247.
Get counted: http://counter.li.org/
Mais detalhes sobre a lista de discussão R-br