- Rcppでは行列データをC++内で作ってRのmatrixにして返すことはできるようだが、任意次元のarrayとして返す"Rcpp::Array"というものはないようだ
- こちら(Cで作業→Rに持ち込み、という形)で3次元の点に色を付けているが、ベクトルで返して、それをアレイに組んでいる
- まねをしてRcppでやってみよう
library(Rcpp)
library(inline)
src<-'
int Nx=as<int>(N1);
int Ny=as<int>(N2);
int Nz=as<int>(N3);
Rcpp::NumericVector a(Nx*Ny*Nz);
int counter=0;
for (int k = 0; k < Nz; k++) {
for (int j = 0; j < Ny; j++) {
for (int i = 0; i < Nx; i++) {
a[counter]= (i + 1)*(j + 1)*(k + 1)*1.0;
counter++;
}
}
}
return a;
'
fx.test1<-cxxfunction(signature(N1="integer",N2="integer",N3="integer"), include=c(""),src,plugin="Rcpp")
library(rgl)
N1<-10
N2<-15
N3<-20
test.out<-fx.test1(N1,N2,N3)
test.out2<-array(1,c(N1,N2,N3))
addresses<-which(test.out2>0,arr.ind=TRUE)
plot3d(addresses,col=gray((test.out-min(test.out))/(max(test.out)-min(test.out))))
A<-array(test.out,c(N1,N2,N3))
plot3d(slice.index(A,1),slice.index(A,2),slice.index(A,3),col=rainbow(256)[A/(max(A))*256+1],alpha=ifelse(A!=0,1,0))