R语言原子向量组合多种数据类型时为何输出为double类型?
R中拼接不同类型元素生成向量返回double类型的原因
复现代码与运行结果
v <- c(1L, 2, TRUE) typeof(v)
运行输出:
[1] "double"
原因解释
R的原子向量有硬性规则:同一个原子向量内的所有元素必须属于同一种基础数据类型。当用c()函数拼接不同类型的元素时,R会按照固定的类型优先级规则,把所有元素自动转换为优先级最高的类型,不会保留混合类型。
类型优先级从低到高排序为:
- 逻辑型(logical)
- 整型(integer)
- 双精度浮点型(double)
- 字符型(character)
对应代码里的三个元素类型分别是:
1L:带L后缀,是R里标记整型(integer)的常量写法2:不带特殊后缀的数值在R里默认是双精度浮点型(double)常量TRUE:逻辑型(logical)常量
三个元素里优先级最高的是双精度浮点型,因此所有元素都会被统一转换为double类型:
- 整型的1L会直接转为double类型的1
- 逻辑值TRUE在数值转换规则下对应转为1(逻辑值FALSE对应转为0)
最终生成的向量所有元素均为double类型,因此typeof(v)的返回结果为"double"。
内容的提问来源于stack exchange,提问作者SATHWIK
相关产品推荐
相关产品推荐

