美文网首页
【书】《Advanced R》R数据结构

【书】《Advanced R》R数据结构

作者: JamesMori | 来源:发表于2021-07-30 23:27 被阅读0次

先看文字理解,图在最后

1、结构

R的基本数据结构是向量(vector),向量又有两种:atomic vector 和 list(后面简称vector为向量,atomic vector为基础向量,list为列表)。
两者的区别在于,基础向量仅能容纳数据类型一致的数据,而列表可以容纳不同种类数据。
基础数据类型仅有Logical、Interger、Double、Character四种。

structure()是构建向量的根本函数,是很多函数背后的操作(与此文主干无关)

2、属性

所有向量都有属性(attribute),可以看作他们的相关信息(metadata)。
属性可以随意设定,设定特定的属性可以使用提前封装的方法或后来人写的R包。
比如比较常见的的属性如:1)dim;2)names;3)class
通过属性dim可以管理数据的结构;通过属性names可以命名;
属性class上设定了很多与函数调用(generic function)相关的方法,所以也就发展出了S3 面向对象编程(Object-Oriented programming)。相较于其他语言,较为粗糙,所以后面有了S4,将一切都封装起来了。

面向对象编程简单地说就是,针对不同的对象采取特定的操作。举例:print是个通用的函数,但是针对不同的类(如vector和factor)会选择不同的子函数来操作(print.vector或print.factor)

3、S3

通过“class”这个属性,并且设定附加的其他属性,R建立了基本的面向对象的操作。举例如下:

x <- factor(c("a", "b", "b", "a"))
typeof(x)    # 对于基础向量,返回的就是数据类型
#> [1] "integer"
attributes(x)    #获取属性,这列的levels属性就是factor类的附加属性之一,说白了就是在该类中有意义
#> $levels
#> [1] "a" "b"
#>
#> $class
#> [1] "factor"

factor、POSIXct、Date是基于基础向量的S3类

4、列表

再专门讲一下列表是为了,记住list和atomic vector才是R最基础的数据结构。
data.frame、tibble是基于list的S3类
看一下代码加深理解

l1 <- list(1:3, "a", c(TRUE, FALSE, TRUE), c(2.3, 5.9))
df<-data.frame(n=1:3,l=c("a","b","c"))

typeof(l1)
#>[1] "list"
typeof(df)
#>[1] "list"

attributes(l1)   
#>NULL
attributes(df)   
#>$names
#>[1] "n" "l"
#>
#>$class
#>[1] "data.frame"
#>
#>$row.names
#>[1] 1 2 3

5、NULL

在向量以外,R还有个类型就是NULL

c<-c()
d<-NULL

typeof(c)
#>"NULL"
typeof(d)
#>"NULL"

6、小结

基本类型
基础向量及延伸S3类
列表及延伸S3类
向量包括属性和数据;
S3其实就是向量的属性得以利用而发生的延伸;
书中还对面向对象的基础”继承“及”方法分配“,以及”tibble和data.frame的区别“进行了简单的介绍

7、S4

All functions related to S4 live in the methods package.
S4明天写

相关文章

网友评论

      本文标题:【书】《Advanced R》R数据结构

      本文链接:https://www.haomeiwen.com/subject/mexhvltx.html