以前、R についていくつか質問しました。回答ありがとうございます。
私は R の string(character) に慣れ親しみ、スカラー文字とベクターには違いがあることを知っていました。
しかし、R の C api で文字列を効果的に処理する方法についてはまだ質問がありますか? ここで"handle"
は、文字列にメモリを割り当て、データを読み書きすることを意味します。
たとえば、次は文字列を処理 (処理) するためのコードです。
SEXP processing(SEXP v)
{
SEXP ans = R_NilValue;
PROTECT(v = AS_CHARACTER(v));
const char* src = CHAR(STRING_ELT(v, 0));
size_t src_len = strlen(src);
char *dst;
size_t dst_max_size;
do_some_processing(src, src_len, dst, &dst_max_size);
PROTECT(ans = NEW_CHARACTER(1));
SET_STRING_ELT(ans, 0, mkCharLen(dst, dst_max_size));
UNPROTECT(2);
return ans;
}
文字列ベクトルを使用して文字列を処理することが、文字列を処理する最も効果的な方法であるかどうかは疑問です。
では、上記のコードは 、 、 のような C API を使用して処理を行うための最も安価なSTRING_ELT
方法NEW_CHARACTER
ですかSET_STRING_ELT
? これcheap
は の視点ですtime and space overhead
。
ありがとう。