トップ
新規
一覧
単語検索
最終更新
ヘルプ
ログイン
アールメカブ
hidden_R_Matrix
をテンプレートにして作成
開始行:
[[Rの備忘録]]
#include <R.h>
#include <Rdefines.h>
#include <Rinternals.h>
/////////////////////extern "C" {
#include <string>
#include <map>
using namespace std;
////////////////////}
extern "C" {
int i, j, nx, ny, *rans, prt = 0;
// int * px = length(INTEGER(x));
// int * py = length(INTEGER(y));
SEXP ans, dim, dimnames, row_names, col_names;
// nx = length(INTEGER(x));
// ny = length(INTEGER(y));
nx = INTEGER_VALUE(x);
ny = INTEGER_VALUE(y);
nx = 3; ny = 5; // 3 行 5 列に限定する
PROTECT (ans = allocMatrix(INTSXP, nx, ny));prt++;
rans = INTEGER(ans);
for(i = 0; i < nx; i++){
for(j = 0; j < ny; j++){
rans[i + nx * j] = i + j;
}
}
PROTECT(dim = allocVector(INTSXP, 2));prt++;
INTEGER(dim)[0] = nx; INTEGER(dim)[1] = ny;
setAttrib(ans, R_DimSymbol, dim);
PROTECT(row_names = allocVector(STRSXP, nx));prt++;
SET_STRING_ELT(row_names, 0, mkChar("R1"));
SET_STRING_ELT(row_names, 1, mkChar("R2"));
SET_STRING_ELT(row_names, 2, mkChar("R3"));
PROTECT(col_names = allocVector(STRSXP, ny));prt++;
SET_STRING_ELT(col_names, 0, mkChar("C1"));
SET_STRING_ELT(col_names, 1, mkChar("C2"));
SET_STRING_ELT(col_names, 2, mkChar("C3"));
SET_STRING_ELT(col_names, 3, mkChar("C4"));
SET_STRING_ELT(col_names, 4, mkChar("C5"));
PROTECT(dimnames = allocVector(VECSXP, 2));prt++;
SET_VECTOR_ELT(dimnames, 0, row_names); // 行の名前をセ...
// SET_VECTOR_ELT(dimnames, 0, getAttrib(x,
R_NamesSymbol));
SET_VECTOR_ELT(dimnames, 1, col_names);//列名をセット
//SET_VECTOR_ELT(dimnames, 1, getAttrib(y,
R_NamesSymbol));
setAttrib(ans, R_DimNamesSymbol, dimnames);
//////////////////// < 以下は動作しない>
// PROTECT(row_names = allocVector(STRSXP, 3));prt++;
// SET_STRING_ELT(row_names, 0, mkChar("A"));
// SET_STRING_ELT(row_names, 1, mkChar("B"));
// SET_STRING_ELT(row_names, 2, mkChar("C"));
// setAttrib(ans, R_RowNamesSymbol, row_names);
//////////////////// </ 以上は動作しない>
UNPROTECT(prt);
return (ans);
}
}//extern
dyn.load("RMatrix.so")
# dyn.unload("RMatrix.so")
x <- .Call("RMatrix", 3,10)
終了行:
[[Rの備忘録]]
#include <R.h>
#include <Rdefines.h>
#include <Rinternals.h>
/////////////////////extern "C" {
#include <string>
#include <map>
using namespace std;
////////////////////}
extern "C" {
int i, j, nx, ny, *rans, prt = 0;
// int * px = length(INTEGER(x));
// int * py = length(INTEGER(y));
SEXP ans, dim, dimnames, row_names, col_names;
// nx = length(INTEGER(x));
// ny = length(INTEGER(y));
nx = INTEGER_VALUE(x);
ny = INTEGER_VALUE(y);
nx = 3; ny = 5; // 3 行 5 列に限定する
PROTECT (ans = allocMatrix(INTSXP, nx, ny));prt++;
rans = INTEGER(ans);
for(i = 0; i < nx; i++){
for(j = 0; j < ny; j++){
rans[i + nx * j] = i + j;
}
}
PROTECT(dim = allocVector(INTSXP, 2));prt++;
INTEGER(dim)[0] = nx; INTEGER(dim)[1] = ny;
setAttrib(ans, R_DimSymbol, dim);
PROTECT(row_names = allocVector(STRSXP, nx));prt++;
SET_STRING_ELT(row_names, 0, mkChar("R1"));
SET_STRING_ELT(row_names, 1, mkChar("R2"));
SET_STRING_ELT(row_names, 2, mkChar("R3"));
PROTECT(col_names = allocVector(STRSXP, ny));prt++;
SET_STRING_ELT(col_names, 0, mkChar("C1"));
SET_STRING_ELT(col_names, 1, mkChar("C2"));
SET_STRING_ELT(col_names, 2, mkChar("C3"));
SET_STRING_ELT(col_names, 3, mkChar("C4"));
SET_STRING_ELT(col_names, 4, mkChar("C5"));
PROTECT(dimnames = allocVector(VECSXP, 2));prt++;
SET_VECTOR_ELT(dimnames, 0, row_names); // 行の名前をセ...
// SET_VECTOR_ELT(dimnames, 0, getAttrib(x,
R_NamesSymbol));
SET_VECTOR_ELT(dimnames, 1, col_names);//列名をセット
//SET_VECTOR_ELT(dimnames, 1, getAttrib(y,
R_NamesSymbol));
setAttrib(ans, R_DimNamesSymbol, dimnames);
//////////////////// < 以下は動作しない>
// PROTECT(row_names = allocVector(STRSXP, 3));prt++;
// SET_STRING_ELT(row_names, 0, mkChar("A"));
// SET_STRING_ELT(row_names, 1, mkChar("B"));
// SET_STRING_ELT(row_names, 2, mkChar("C"));
// setAttrib(ans, R_RowNamesSymbol, row_names);
//////////////////// </ 以上は動作しない>
UNPROTECT(prt);
return (ans);
}
}//extern
dyn.load("RMatrix.so")
# dyn.unload("RMatrix.so")
x <- .Call("RMatrix", 3,10)
ページ名: