Programando com C e R

Boa tarde pessoal, Estou tentando utilizar C e R juntos, fiz 3 funções em C e chamo elas do R. Mas estive testando e testando e deu este erro. Na verdade as vezes da este erro e as vezes trava de vez. Não sei se é pela forma em que estou programando em C (na verdade estou bem enferrujado e estou utilizando ponteiros) deixo aqui o código quem puder de uma olhadinha. [image: Imagem inline 2] Na verdade é um mesmo código que faço três vezes (assim que descobri o erro). O problema aparece quando rodo mais de dois vezes (por isso que aqui copiei o codigo 3 vezes) source("volatnGarch.r") source("sbootGarch.r") source("forebootGarch.r") yb = rnorm(10000) d = 1 p=1 q=1 garchOrder = c(p,q) Coeff_b = c(0.01,0.1,0.85) aux1 = Coeff_b[1]/(1-Coeff_b[2]-Coeff_b[3]) aux3 = cumsum(c(1,1)) C = sbootGarch(aux1,yb,Coeff_b,garchOrder) A = volatnGarch(yb,Coeff_b,garchOrder) e_b = rnorm(5) n.ahead = length(e_b) B = forebootGarch(yb,e_b,A[[1]],Coeff_b,garchOrder) rm(list=ls(all=TRUE)) source("volatnGarch.r") source("sbootGarch.r") source("forebootGarch.r") yb = rnorm(10000) d = 1 p=1 q=1 garchOrder = c(p,q) Coeff_b = c(0.01,0.1,0.85) aux1 = Coeff_b[1]/(1-Coeff_b[2]-Coeff_b[3]) aux3 = cumsum(c(1,1)) C = sbootGarch(aux1,yb,Coeff_b,garchOrder) A = volatnGarch(yb,Coeff_b,garchOrder) e_b = rnorm(5) n.ahead = length(e_b) B = forebootGarch(yb,e_b,A[[1]],Coeff_b,garchOrder) rm(list=ls(all=TRUE)) source("volatnGarch.r") source("sbootGarch.r") source("forebootGarch.r") yb = rnorm(10000) d = 1 p=1 q=1 garchOrder = c(p,q) Coeff_b = c(0.01,0.1,0.85) aux1 = Coeff_b[1]/(1-Coeff_b[2]-Coeff_b[3]) aux3 = cumsum(c(1,1)) C = sbootGarch(aux1,yb,Coeff_b,garchOrder) A = volatnGarch(yb,Coeff_b,garchOrder) e_b = rnorm(5) n.ahead = length(e_b) B = forebootGarch(yb,e_b,A[[1]],Coeff_b,garchOrder) rm(list=ls(all=TRUE)) as funções em C seguem no seguinte link. https://www.dropbox.com/sh/5f8bpx6pt2cgam6/fcuvUtFili/Codigos *Carlos Trucíos Maza ** : ctrucios@gmail.com

Olha, nunca chamei C do R (mas deveria!). Em todo caso, você não parece estar usando o pacote Rcpp. Não seria melhor com o Rcpp? abç Manoel 2013/2/6 ctrucios <ctrucios@gmail.com>
Boa tarde pessoal,
Estou tentando utilizar C e R juntos, fiz 3 funções em C e chamo elas do R. Mas estive testando e testando e deu este erro. Na verdade as vezes da este erro e as vezes trava de vez.
Não sei se é pela forma em que estou programando em C (na verdade estou bem enferrujado e estou utilizando ponteiros) deixo aqui o código quem puder de uma olhadinha.
[image: Imagem inline 2]
Na verdade é um mesmo código que faço três vezes (assim que descobri o erro). O problema aparece quando rodo mais de dois vezes (por isso que aqui copiei o codigo 3 vezes)
source("volatnGarch.r") source("sbootGarch.r") source("forebootGarch.r") yb = rnorm(10000)
d = 1 p=1 q=1 garchOrder = c(p,q) Coeff_b = c(0.01,0.1,0.85) aux1 = Coeff_b[1]/(1-Coeff_b[2]-Coeff_b[3]) aux3 = cumsum(c(1,1)) C = sbootGarch(aux1,yb,Coeff_b,garchOrder) A = volatnGarch(yb,Coeff_b,garchOrder) e_b = rnorm(5) n.ahead = length(e_b) B = forebootGarch(yb,e_b,A[[1]],Coeff_b,garchOrder) rm(list=ls(all=TRUE))
source("volatnGarch.r") source("sbootGarch.r") source("forebootGarch.r") yb = rnorm(10000)
d = 1 p=1 q=1 garchOrder = c(p,q) Coeff_b = c(0.01,0.1,0.85) aux1 = Coeff_b[1]/(1-Coeff_b[2]-Coeff_b[3]) aux3 = cumsum(c(1,1)) C = sbootGarch(aux1,yb,Coeff_b,garchOrder) A = volatnGarch(yb,Coeff_b,garchOrder) e_b = rnorm(5) n.ahead = length(e_b) B = forebootGarch(yb,e_b,A[[1]],Coeff_b,garchOrder) rm(list=ls(all=TRUE))
source("volatnGarch.r") source("sbootGarch.r") source("forebootGarch.r") yb = rnorm(10000)
d = 1 p=1 q=1 garchOrder = c(p,q) Coeff_b = c(0.01,0.1,0.85) aux1 = Coeff_b[1]/(1-Coeff_b[2]-Coeff_b[3]) aux3 = cumsum(c(1,1)) C = sbootGarch(aux1,yb,Coeff_b,garchOrder) A = volatnGarch(yb,Coeff_b,garchOrder) e_b = rnorm(5) n.ahead = length(e_b) B = forebootGarch(yb,e_b,A[[1]],Coeff_b,garchOrder) rm(list=ls(all=TRUE))
as funções em C seguem no seguinte link. https://www.dropbox.com/sh/5f8bpx6pt2cgam6/fcuvUtFili/Codigos
*Carlos Trucíos Maza ** : ctrucios@gmail.com
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- Manoel Galdino https://sites.google.com/site/galdinomcz/

Então Manoel, eu tentei usar o Rcpp mas meu computador trava de vez quando uso ele (eu pensei que era problema com o pacote mesmo), ai fui pesquisando e conseguir mexer no C (sem usar o Rcpp) , quando testei as funções 1 por 1 (para ver se obtinha os mesmo resultados do que minha função em codigo R) ele roda certinho...eu nao sei porque da esse erro quando rodo varias vezes *Carlos Trucíos Maza ** : ctrucios@gmail.com Em 6 de fevereiro de 2013 14:47, Manoel Galdino <mcz.fea@gmail.com>escreveu:
Olha, nunca chamei C do R (mas deveria!). Em todo caso, você não parece estar usando o pacote Rcpp. Não seria melhor com o Rcpp?
abç Manoel
2013/2/6 ctrucios <ctrucios@gmail.com>
Boa tarde pessoal,
Estou tentando utilizar C e R juntos, fiz 3 funções em C e chamo elas do R. Mas estive testando e testando e deu este erro. Na verdade as vezes da este erro e as vezes trava de vez.
Não sei se é pela forma em que estou programando em C (na verdade estou bem enferrujado e estou utilizando ponteiros) deixo aqui o código quem puder de uma olhadinha.
[image: Imagem inline 2]
Na verdade é um mesmo código que faço três vezes (assim que descobri o erro). O problema aparece quando rodo mais de dois vezes (por isso que aqui copiei o codigo 3 vezes)
source("volatnGarch.r") source("sbootGarch.r") source("forebootGarch.r") yb = rnorm(10000)
d = 1 p=1 q=1 garchOrder = c(p,q) Coeff_b = c(0.01,0.1,0.85) aux1 = Coeff_b[1]/(1-Coeff_b[2]-Coeff_b[3]) aux3 = cumsum(c(1,1)) C = sbootGarch(aux1,yb,Coeff_b,garchOrder) A = volatnGarch(yb,Coeff_b,garchOrder) e_b = rnorm(5) n.ahead = length(e_b) B = forebootGarch(yb,e_b,A[[1]],Coeff_b,garchOrder) rm(list=ls(all=TRUE))
source("volatnGarch.r") source("sbootGarch.r") source("forebootGarch.r") yb = rnorm(10000)
d = 1 p=1 q=1 garchOrder = c(p,q) Coeff_b = c(0.01,0.1,0.85) aux1 = Coeff_b[1]/(1-Coeff_b[2]-Coeff_b[3]) aux3 = cumsum(c(1,1)) C = sbootGarch(aux1,yb,Coeff_b,garchOrder) A = volatnGarch(yb,Coeff_b,garchOrder) e_b = rnorm(5) n.ahead = length(e_b) B = forebootGarch(yb,e_b,A[[1]],Coeff_b,garchOrder) rm(list=ls(all=TRUE))
source("volatnGarch.r") source("sbootGarch.r") source("forebootGarch.r") yb = rnorm(10000)
d = 1 p=1 q=1 garchOrder = c(p,q) Coeff_b = c(0.01,0.1,0.85) aux1 = Coeff_b[1]/(1-Coeff_b[2]-Coeff_b[3]) aux3 = cumsum(c(1,1)) C = sbootGarch(aux1,yb,Coeff_b,garchOrder) A = volatnGarch(yb,Coeff_b,garchOrder) e_b = rnorm(5) n.ahead = length(e_b) B = forebootGarch(yb,e_b,A[[1]],Coeff_b,garchOrder) rm(list=ls(all=TRUE))
as funções em C seguem no seguinte link. https://www.dropbox.com/sh/5f8bpx6pt2cgam6/fcuvUtFili/Codigos
*Carlos Trucíos Maza ** : ctrucios@gmail.com
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-- Manoel Galdino https://sites.google.com/site/galdinomcz/
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.

Olá Carlos, Há algum tempo me deparei com uma situação bem parecida com essa que você apresentou. Acabei descobrindo que era um erro de alocação de memória por usar os ponteiros de maneira errada. Acabei resolvendo o problema usando uma função auxiliar a qual é chamada pelo R e ao mesmo tempo chama a função que realmente faz o trabalho em C. No meu caso a função est.map.c (https://github.com/mmollina/onemap/blob/master/onemap/R/est.map.c.R#L20) chama a função est_map_outbred (https://github.com/mmollina/onemap/blob/master/onemap/src/hmm_out.c#L1016) que por sua vez chama a função est_map, que é quem realmente faz o trabalho. Ainda, notei uma coisa estranha nos seus códigos: a função sbootGarch é do tipo void, mas retorna um double (y_boot) Espero que tenha ajudado Marcelo -- ---------------------------------------------------------------------- Marcelo Mollinari Department of Genetics – ESALQ University of São Paulo – USP -----------------------------------------------------------------------
participantes (3)
-
ctrucios
-
Manoel Galdino
-
Marcelo Mollinari