R语言中所有对象都是vector吗?实操验证后的技术疑问
关于「R语言中所有内容都是vector吗」的解答
结论
答案是否定的,R中并非所有内容都属于vector。
你的测试结果为什么全为TRUE
你测试的几类对象返回is.vector() == TRUE,完全符合R的底层设计逻辑:
R中的vector分为两大类:
- 原子向量:存储单一数据类型的序列,你测试的数字、字符串、布尔值等单个字面量,本质都是长度为1的原子向量
- 列表(通用向量):允许存储不同类型的元素,本身也被归类为vector的一种
另外is.vector()的判断规则本身也比较宽松:只要对象除了names属性外没有其他附加属性,就会返回TRUE,这也是你测试的几个案例都返回TRUE的原因。
不属于vector的常见R对象
以下几类高频使用的R对象,is.vector()都会返回FALSE:
- 矩阵/数组:自带
dim维度属性,示例:
mat <- matrix(1:4, nrow = 2) is.vector(mat) # 返回FALSE
- 数据框:本质是特殊的列表,但自带
class、row.names等属性,示例:
df <- data.frame(a = 1:3, b = c("x","y","z")) is.vector(df) # 返回FALSE
- 自定义函数:
add_one <- function(x) {x + 1} is.vector(add_one) # 返回FALSE
除此之外,R中的环境、公式、表达式、S4类对象等,也都不属于vector的范畴。
内容的提问来源于stack exchange,提问作者Chris Wesseling
相关产品推荐
相关产品推荐

