unlistまたはを呼び出すcと、型はすべてを表すことができる最小の型に昇格されます。
> c(as.integer(1), 2.3, '3')
[1] "1" "2.3" "3"
> c(TRUE, 5)
[1] 1 5
> unlist(list(as.integer(1:5), as.complex(2:4)))
[1] 1+0i 2+0i 3+0i 4+0i 5+0i 2+0i 3+0i 4+0i
C/C++ コードからこのロジックにアクセスするにはどうすればよいですか?
cとの C ソースを探したところ、と( )unlistの両方に次のコードが見つかりました。do_c_dfltdo_unlistmain/bind.c
if (data.ans_flags & 512) mode = EXPRSXP;
else if (data.ans_flags & 256) mode = VECSXP;
else if (data.ans_flags & 128) mode = STRSXP;
else if (data.ans_flags & 64) mode = CPLXSXP;
else if (data.ans_flags & 32) mode = REALSXP;
else if (data.ans_flags & 16) mode = INTSXP;
else if (data.ans_flags & 2) mode = LGLSXP;
else if (data.ans_flags & 1) mode = RAWSXP;
dataタイプの変数は、強制ロジックを定義しているように見えるBindDataルーチンによって計算されます。AnswerTypeただし、型のBindData宣言は inbind.cのみです。
だから:Rの一般的な強制ロジックはどこかにエクスポートされていますか、それともコードをコピーして貼り付けなければなりbind.cませんか?(ネタバレすみません…)