R语言进阶|广义向量和属性解析

我请问一下,R语言进阶|广义向量和属性解析
最新回答
月色染红颜

2024-11-29 20:02:09

本文深入解析了 R 语言中「广义向量」与「属性」的概念。广义向量分为「atomic vector」和「List」两种。其中,「atomic vector」包括四种基本类型:逻辑型、整型、浮点型和字符型,它们要求元素同质性。而「List」则可以包含不同类型的元素。每个向量都具有属性,如最基本的「names」属性,以及可让「atomic vector」转换为「matrix」或「array」的「dim」属性。添加「class」属性则可形成「S3」对象,如「factor」、「date」、「times」、「data frame」和「tibble」等。

「atomic vector」主要分为四类:逻辑型、整型、浮点型和字符型。整型和浮点型属于数字型向量。向量可通过「c()」函数创建,内部向量元素会被「压扁」。通过「typeof()」查看向量类型,「length()」计算长度。缺失值「NA」在 R 中表示未知或缺失信息,具有传染性,但某些运算结果为特定值时可作为例外。判断向量属性使用「is.*()」函数,如「is.logical()」、「is.integer()」等。

当向量包含不同类型的元素时,会自动转换成同一种类型,优先级为「logical」、「integer」、「double」、「character」。数学运算函数会自动将可转换为数字的元素转换为数字类型。强制转换类型使用「as.*()」函数,如「as.logical()」、「as.integer()」等。属性包括「names」和「dim」等,可通过「attr()」、「attributes()」和「structure()」函数获取或设置。因子「factor」基于整型向量,有「level」属性定义值范围,有序因子「ordered」有特定顺序。

列表「list」属于广义向量,每个元素可以是不同类型的对象。列表创建使用「list()」函数,内部元素是对象的引用,所以列表大小实际较小。列表在技术上是递归结构,内部元素也可以是列表。测试和强制转换使用「is.list()」、「as.list()」和「unlist()」函数。

向量通过添加「dim」属性可转换为「matrix」或「array」对象。数据框「data frame」基于「atomic vector」,存在列名、行名和「class」属性,每列长度一致。数据框有矩阵和列表特性,但行名不允许重复。tibble 和 data.table 是数据框的类似数据类型,各有特点,具体比较可参考相关文章。

最后介绍「NULL」,长度为零的向量,无属性,可用「is.null()」检测。NULL在编程中常用于表示空或未定义状态。本篇文章旨在深入理解 R 语言中向量和属性的概念,后续将持续分享进阶知识,敬请关注。

参考资源:

[1] data.frame,data.table 和 tibble 的使用比较: [rstudio-pubs-static.s3.amazonaws.com...

[2] Advanced R: adv-r.hadley.nz/vectors...