Rcpp 函数在使用 "long" 输入时崩溃 R
Rcpp function crashing R when using a "long" input
i具有线性插值的C 函数,我正在使用Rcpp
运行的是,当我与不太"太长"的初始向量进行一些插值时,用于工作正常的功能,但是当我将初始向量的大小三倍时,该函数从循环中运行良好,但是当我决定使用相同输入的函数循环时,rstudio崩溃。当使用RCPP和R崩溃时,我在循环中调用RCPP函数时崩溃了,但我只是没有找到对我的问题有帮助的。
这是C 函数:
double InterpolacionRAWCpp(NumericVector plazos,NumericVector tasas,double plazoRequerido){
double interpolacionRAW,a,p1,p2;
int numero_plazo;
double ayuda_plazo = plazoRequerido;
NumericVector tn(tasas.size()+1);
NumericVector pn(tasas.size()+1);
tn[0] = tasas[0];
pn[0] = 0;
tn[Rcpp::Range(1,tn.size())] = tasas;
pn[Rcpp::Range(1,pn.size())] = plazos;
interpolacionRAW = 0;
numero_plazo = tasas.size();
if(ayuda_plazo==0){
interpolacionRAW=tn[0];
} else {
for(int i =0; i<numero_plazo;++i){
if((plazoRequerido > pn[i]) & (plazoRequerido<=pn[i+1])){
a = pn[i+1]-pn[i];
p1 = (pn[i+1]*tn[i+1]-pn[i]*tn[i])/a;
p2 = (pn[i+1]*pn[i]*(tn[i]-tn[i+1]))/(a*plazoRequerido);
interpolacionRAW=p2+p1;
break;
} else if(plazoRequerido>pn[(numero_plazo-1)]){
// Cuando el plazo es mayor al maximo plazo del vector de plazos
// entonces se extrapola
a=pn[(numero_plazo)]-pn[numero_plazo-1];
p1=(pn[(numero_plazo)]*tn[(numero_plazo)]-pn[numero_plazo-1]*tn[numero_plazo-1])/a;
interpolacionRAW=(p1*(plazoRequerido-pn[(numero_plazo)])+pn[(numero_plazo)]*tn[(numero_plazo)])/plazoRequerido;
break;
} else if(plazoRequerido<pn[0]){
// Cuando el plazoRequerido es menor que el plazo minimo del vector de plazos
// se extrapola, para atraz
a=pn[1]-pn[0];
p1=(pn[1]*tn[1]-pn[0]*tn[0])/a;
interpolacionRAW=(p1*(plazoRequerido-pn[1])+pn[1]*tn[1])/plazoRequerido;
break;
}
}
}
return interpolacionRAW;
}
使用此输入,我不会在循环函数时遇到任何问题:
plazo2 = c(0.25,0.50,1.00,3.00,5.00,7.00,10.00,15.00)
dato2 = c(4.147594,4.197599 ,4.403012,5.281392,6.169297,7.124895,8.699570,11.574581)
x = NULL
for(i in 1:10000){
x = rbind(x,InterpolacionRAWCpp(plazo2,dato2,10))
}
但是,如果我更改plazo2和dato2:
plazo1 = c(0.08333,0.16667,0.25000,0.50000,1.01389,2.02778,3.04167,4.05556,5.06944,
6.08333,7.09722,8.11111,9.12500,10.13889,11.15278,12.16667,13.18056,14.19444,15.20833)
dato1 = c(4.11798,4.13244,4.14501,4.19365,4.39560,4.80608,5.27216,5.71510,6.16038,
6.62284,7.11100,7.67899,8.17816,8.68633,9.20055,9.71490,10.32713,10.94182,11.55650)
rstudio将崩溃
这是一个索引错误。 c 索引范围从0到 n-1 ,而不是 r 的1至n系统。
在某种程度上,您在这里考虑这一点:
// Note vectors are n+1
NumericVector tn(tasas.size()+1);
NumericVector pn(tasas.size()+1);
// Assign into 0
tn[0] = tasas[0];
pn[0] = 0;
但是,下一部分是有问题的:
// Here we are using n+1 but need just n.
tn[Rcpp::Range(1,tn.size())] = tasas;
pn[Rcpp::Range(1,pn.size())] = plazos;
将最后一部分切换为:
// Retrieves n+1 and by subtracting 1 we stay in range.
tn[Rcpp::Range(1,tn.size() - 1)] = tasas;
pn[Rcpp::Range(1,pn.size() - 1)] = plazos;
相关文章:
- 虚幻引擎 3 游戏在 Steam 输入时崩溃
- 为什么这个程序在我插入前2个输入后崩溃
- C 程序仅在字符阵列获得“ 1000!”的输入时才在DELETE上崩溃
- 程序在 scanf( "%x" ,&foo) 上崩溃时尝试输入十六进制值
- 无效输入导致程序崩溃.有没有办法忽略它
- Pollard Rho 在不太大的输入上崩溃
- 当我输入12位数字时,为什么以下代码崩溃
- 用户输入可以超过数组的大小,但最终会崩溃
- Rcpp 函数在使用 "long" 输入时崩溃 R
- 我的使用地图的程序在第一次输入后崩溃
- 当我尝试输入值时程序崩溃
- 当输入大小足够大时,合并排序崩溃
- 程序在输入 10 个字符串后崩溃
- 当输入到结构点中的双指针数组时,程序崩溃
- 当我输入矩阵值时,为什么我的程序会崩溃
- 在opencv中发现凸性缺陷?[崩溃取决于给定的输入图像]
- 每当我输入长度为4的字符串时,下面的cpp代码就会崩溃(向量中的malloc失败)
- 当输入为高值时程序崩溃
- 暴力迫使程序以不同的输入崩溃的策略是什么?
- 输入崩溃(c++)