rcpp - R 会话中止
rcpp - R session Aborted
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 代码。
但是当我执行此操作时,我收到了 "R Session Aborted. R encountered a fatal error. The session was terminated." 消息。
但我找不到我的代码有任何问题。
不知道是不是硬件的问题........不是我的代码T.T
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
感谢德克
这是我编辑的代码。
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;
}')
罗兰已经给了你一个很好的提示,你也有两个类型错误并且在向量初始化时错过了一个大小。
以下是修复后的版本,作为一个 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))
*/
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 代码。
但是当我执行此操作时,我收到了 "R Session Aborted. R encountered a fatal error. The session was terminated." 消息。
但我找不到我的代码有任何问题。
不知道是不是硬件的问题........不是我的代码T.T
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
感谢德克
这是我编辑的代码。
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;
}')
罗兰已经给了你一个很好的提示,你也有两个类型错误并且在向量初始化时错过了一个大小。
以下是修复后的版本,作为一个 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))
*/