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_dflt
do_unlist
main/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
ませんか?(ネタバレすみません…)