2

ここで質問しましたが、それが別の質問につながりました。

R では、文字列と文字の間に基本的な区別はありません。「文字列」は、1 つ以上の文字を含む単なる文字変数です。

スカラー文字変数とベクトルには違いがあります。文字ベクトルは、1 つのオブジェクトとして格納される文字列のセットです。

では、Rのc apiで文字列をどのように割り当てるのだろうか?たとえば、私は何から得ますか:

result = Rf_allocVector(STRSXP, dst_size);

それは ( result)ですかscalar character variable、それともvectorですか? または、文字列を割り当てるために他の API を使用できますか?

ありがとう。

4

1 に答える 1

4

これは、 Rcppパッケージの紹介ビネットに動機付けの例として記載されています (これは2011 年に論文 JSSとしても公開されています)。

C API では、次のベクトルを割り当てる必要がありますSTRSXP

SEXP ab;
PROTECT(ab = allocVector(STRSXP, 2));
SET_STRING_ELT( ab, 0, mkChar("foo") );
SET_STRING_ELT( ab, 1, mkChar("bar") );
UNPROTECT(1);

PROTECTこれは、UNPROTECTSEXPallocVectorSET_STRING_ELT、およびの知識をプログラマーに課しmkCharます。

一方、Rcpp とRcpp::CharacterVectorクラスを使用すると、同じコードをより簡潔に表現できます。

Rcpp::CharacterVector ab(2);
ab[0] = "foo";
ab[1] = "bar";
于 2013-08-30T03:41:11.363 に答える