[[Rの備忘録]]
C のコード上で R で文字ベクトルを作成する
以下,情報が古いです.たとえば mkChar()ではなく mkCahrCE()を使うべきです.
SEXP vec1 // Rオブジェクトを用意して
PROTECT(vec1 = allocVector(STRSXP,1))
// 要素数が 1 個の文字用ベクトルをメモリに割り当てる
SET_STRING_ELT (vefc1, 0, mkChar("hoge"))
// そのベクトルの最初の要素に文字列 hoge を代入する
/*
R CMD SHLIB R_utf8.c -L/usr/local/lib/
*/
#include <R.h>
#include <Rdefines.h>
#include <Rinternals.h>
SEXP myutf8()
{
SEXP myint, mychar;
int *p_myint;
PROTECT(myint = NEW_INTEGER(3));
p_myint = INTEGER_POINTER(myint);
p_myint[0] = 1;
p_myint[1] = 2;
p_myint[2] = 3;
PROTECT(mychar = allocVector(STRSXP,3));// pa++; 2
SET_STRING_ELT(mychar, 0, mkCharCE("一", CE_UTF8 ));
SET_STRING_ELT(mychar, 1, mkCharCE("二", CE_UTF8));
SET_STRING_ELT(mychar, 2, mkCharCE("三", CE_UTF8));
SET_NAMES(myint, mychar);//
UNPROTECT(2);
return myint;
}