- RとCを使うときのファイル操作を、こちらのようにバイナリで行う
- Cのスクリプト
- バイナリファイルを書きだす
- 変数Aを書きだす部分をループの外に出した
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define PI 3.1415926535
int main (int argc, char *argv[]){
int Nx, Ny, Nz;
int i,j,k;
FILE *fp;
Nx = atoi(argv[1]);
Ny = atoi(argv[2]);
Nz = atoi(argv[3]);
double A[Nx][Ny][Nz];
for (k = 0; k < Nz; k++) {
for (j = 0; j < Ny; j++) {
for (i = 0; i < Nx; i++) {
A[i][j][k] = (i + 1)*(j + 1)*(k + 1)*1.0;
}}}
fp = fopen("Numbers.txt","wb");
if(fp == NULL){
printf("ファイル操作中にエラー");
exit(1);
}
fwrite(A,sizeof(double),Nx*Ny*Nz,fp);
fclose(fp);
return 0;
}
library(rgl)
Nx <- as.numeric(commandArgs(trailingOnly = TRUE)[1])
Ny <- as.numeric(commandArgs(trailingOnly = TRUE)[2])
Nz <- as.numeric(commandArgs(trailingOnly = TRUE)[3])
m <-readBin("Numbers.txt",double(),n=Nx*Ny*Nz,endian="little")
A<-array(m,c(Nx,Ny,Nz))
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))
rgl.viewpoint(theta=30,phi=30)
rgl.snapshot("Array.png")
Nx=30
Ny=30
Nz=30
gcc -o mat mat.c
./mat $Nx $Ny $Nz
R --vanilla --slave --args < mat.R $Nx $Ny $Nz
open Array.png