2016-09-25 5 views
0

で使用するCPP機能の変換しますポインタはRは、私はそれをコンパイルして使用するようにrcppパッケージを使用しますが、いくつかのエラーが</p> <p>に発生した実際、私は使用して問題を抱えているCPPの機能を以下およびR</p> <p>でそれを書きたいしているR

 void creationPI(double *distC, int mC, int tailleC, double *PIC,int aC) 
    //distC: distribution de X ; mC= smax-smin+1 ie u+v+1; tailleC=a+1; PIC la matrice PI comme resultat 
    { 

    double *f;//=NULL; /*f(k)=P[X<=k]*/ 
    int t1,k,b,c,l; 
    int top_un,top_deux; 
     //FILE *matrix; 

    t1=2*(aC-1)+1; // taille du vecteur des f ca va de 1-a à a-1 ; k va de [0 à 2*(a-1)] 


    /* ALLOCATION DES MATRICES*/ 
     //if (!(f = (double *)calloc(t1, sizeof(double)))) 
     //exit(ALLOC_ERROR); 
    f = (double *)calloc(t1, sizeof(double)); 


    /* CREATION DES f */ 
     if ((aC-1)<=u) top_un=aC-1; else top_un=u; //top_un=min 
     if ((aC-1)>=u) top_deux=aC-1; else top_deux=u;//top_deux=max 
    /*On a 0<->1-a donc f[k]=P[X<=k+1-a] ou encore P[X<=l]=f[l-1+a]*/ 
     if (aC>v+1) 
       { //remplir le premier f 
      for (k=1-aC; k<smin; k++) {b=k-1+aC; *(f+b)=0;} // on passe dans cette boucle si a> v+1 
        //on remplit la suite jusqu'a min(u,a-1): P[X<=k+1-a]=P[X<=k-a]+P[X=k+1-a] 
        //on remplit donc soit jusqu'a la fin de f soit jusqu'au premier 1 car on utiliser tous les distC 
       for (k=smin; k<top_un+1 ; k++) {b=k-1+aC; *(f+b)=*(f+b-1)+*(distC +k-smin);} 
       //On gere le bout droit, quand il reste des f non remplis : 
       if (aC-1>u) {for (k=top_un+1; k<aC-1+1 ; k++) {b=k-1+aC; *(f+b)=1;}} 
       } 
     else // on a aC<=v+1 
       { // on remplit le premier f 
       *f=0; 
       for (k=smin; k<1-aC+1 ;k++) 
       {b=k-smin; *f=*f+ *(distC+b);} 
       // la suite : P[X<=k+1-a]=P[X<=k-a]+P[X=k+1-a], remarque identique a la precedente 
       for (k=1-aC+1;k<top_un+1; k++) 
       {b=k+aC-1; *(f+b)=*(f+b-1)+ *(distC+v+k);}//dernier +1 cf < 
       //On gere le bout droit, quand il reste des f non remplis : 
       if (aC-1>u) {for (k=top_un+1; k<aC-1+1 ; k++) {b=k-1+aC; *(f+b)=1;}} 
       } 

/*Creation de la matrice PI*/ 
/*PIC[a][a]=1*/ 
*(PIC + (tailleC * aC) + aC)=1; 
for (k=0; k<aC; k++) 
    { 
    b=aC-k-1; 
    *(PIC +(tailleC * k))=*(f+b); 
    c=(2*aC)-k-2;         /* Pi[0,k]=f(-k)*/ 
    *(PIC +(tailleC *k) +aC)=1- *(f+c);   /*Pi[a,l]=1-f(a-k-1)*/ 
    for (l=1; l<aC; l++) 
     { 
     b=l-k-smin; 
     if(b>=0 && b<mC) *(PIC+(tailleC *k)+l)=*(distC + b); 
         /*Pi[k,l]=P[X=l-k]*/ 
     else *(PIC+(tailleC *k)+l)=0.0; 
     } 
    *(PIC+(tailleC *aC)+k)=0.0; 
    } 

free(f); 

}//fin proc creationPI 

Rでこの関数を実行することはできますか?

Rでポインタを検出する方法は?

おかげ

答えて

5

あなたは明示的なポインタ演算やものではありませんで、1990年代スタイルのCコードを書くと、ちょうどRcpp事を言及することにより、魔法の動作することを期待しています。

あなたにはごめんなさい。しかし、Rcppは、寸法を使用してk個の行列でNを宣言

  • にあなたをできるようになります:Rcpp::NumericMatrix M(n, k);は一つの方法であるだけで、あなたがすべきM(i, j) = 42.0;
  • リターンなどの要素iとjでその行列の
  • アクセス要素も〜Rを行列として保存した行列

多くの行列を含め、ここでRcppには1000以上の質問があります。私たちにはRcpp Galleryがあります。私たちには9つのビネットがあります。行列に焦点を当てた2つのパッケージがあります。私は自分の本を持っています。私たちはハドリーの書面を持っています。あなた自身の好意を持ち、それらのいくつかを読んでください。

関連する問題

 関連する問題