2017-12-09 33 views
0
library(Rcpp) 
library(geoR) 
elevationd=as.matrix(data.frame(xcoords=elevation$coords[,1], 
ycoords=elevation$coords[,2], elev=elevation$data)) 
elevationd 

cppFunction('void a(NumericMatrix data){ 
    int nr = data.nrow(); 
    int nc = data.ncol(); 
    NumericVector tmp; 
    for (int i; i<nr; i++){ 
    tmp[i] = data(i,2); 
    } 
    NumericMatrix mat(nr, nr); 
    for (int i; i<nr; i++){ 
    for (int j; j<nr; j++){ 
     mat(i,j) = (tmp[i] - tmp[j])*(tmp[i] - tmp[j]); 
    } 
    } 
}') 


a(elevationd) 

が失敗しましたが、私はこのようなRコードを有しています。rcpp - Rセッション

しかし、私はこれを実装すると、 "R Session Aborted。Rに致命的なエラーが発生しました。セッションが終了しました。"メッセージ。

私は自分のコードに問題が見つかりません。

それはハードウェアの問題がある場合、私は疑問に思う........ない私のコードのTT

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

ディルクにTHX

これは私の編集したコードです。

cppFunction('NumericMatrix f1(NumericMatrix data){ 
    int nr = data.nrow(); 
    int nc = data.ncol(); 
    NumericMatrix mat(nr, nr); 
    for (int i=0; i<nr; i++){ 
    for(int j=0; j<nr; j++){ 
     mat(i,j) = (data(i,2)-data(j,2))*(data(i,2)-data(j,2)); 
    } 
    } 
    return mat; 
}') 
+2

C++のループに関するチュートリアルを参照してください。 iを値に初期化する必要があります。 – Roland

答えて

2

ローランドは、すでにあなたに良いヒントを与え、あなたはまた、間違った二つのタイプを持っていたとベクトルの初期化にサイズを逃しました。

以下

Cはあなたが自動的に実行され、関連するRコードを供給することができ++ファイルとして、修理したバージョンである:あなたのエラーのいくつかを取り上げ

R> Rcpp::sourceCpp("/tmp/jiwon.cpp") 

R> library(geoR) 
-------------------------------------------------------------- 
Analysis of Geostatistical Data 
For an Introduction to geoR go to http://www.leg.ufpr.br/geoR 
geoR version 1.7-5.2 (built on 2016-05-02) is now loaded 
-------------------------------------------------------------- 


R> elevationd <- as.matrix(data.frame(xcoords=elevation$coords[,1], 
+         ycoords=elevation$coords[,2], 
+    .... [TRUNCATED] 

R> str(elevationd) 
num [1:52, 1:3] 0.3 1.4 2.4 3.6 5.7 1.6 2.9 3.4 3.4 4.8 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : chr [1:52] "1" "2" "3" "4" ... 
    ..$ : chr [1:3] "xcoords" "ycoords" "elev" 

R> str(a(elevationd)) 
num [1:52, 1:52] 0 5929 13225 32400 4900 ... 
R> 

そして、ここが修復コードです:

#include <Rcpp.h> 

using namespace Rcpp; 

// [[Rcpp::export]] 
NumericMatrix a(NumericMatrix data){ 
    int nr = data.nrow(); 
    int nc = data.ncol(); 
    NumericVector tmp(nr); 
    for (int i=0; i<nr; i++){ 
    tmp[i] = data(i,2); 
    } 
    NumericMatrix mat(nr, nr); 
    for (int i=0; i<nr; i++){ 
    for (int j=0; j<nr; j++){ 
     mat(i,j) = (tmp[i] - tmp[j])*(tmp[i] - tmp[j]); 
    } 
    } 
    return mat; 
} 

/*** R 
library(geoR) 
elevationd <- as.matrix(data.frame(xcoords=elevation$coords[,1], 
            ycoords=elevation$coords[,2], 
            elev=elevation$data)) 
str(elevationd) 
str(a(elevationd)) 
*/