调用unlist
orc
时,该类型将被提升为能够表示所有内容的最小类型:
> 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++ 代码访问此逻辑?
我查找了 and 的 C 源代码,c
并在and ( )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
在中声明bind.c
。
那么:R 的一般强制逻辑是导出到任何地方,还是我必须从 复制粘贴代码bind.c
?(对不起双关语……)