本教程版权为《糗世界》所有,任何组织或个人不得未经书面许可转载。
在阅读本节前请自测,如果全部都知道正确答案,则可跳过本节。
- 什么是atomic vector的常用基本类型?
- list和atomic vector有哪些不同?
- matrix和data frame有什么不同?
- data frame的列可以保存list吗?
- data frame的每一行或者每一列的长度可以不一致吗?
- 如何将factor正确地转换为数字?
提要
在介绍R的数据类型时,笔者将直接使用其在R中的原名,而不使用翻译名。因为翻译名虽然便于记忆,但非常妨碍对R的理解与应用。
了解R的数据类型对于理解及使用R非常关键。数据类型的模糊认识可能导致错误的结果,这对于科研而言是非常危险的。
数据结构是数据类型的封装方式。R的基本数据结构分为两类(如下表所示),一类是可以存放相同类型数据的(同质的),一类是可以存放不同类型数据的(异质的)。什么是相同类型数据呢?我们知道,诸如C之类的计算机语言将数据类型化分为char, float (double), int, bool等类型,相应的,在R中,基本的数据类型被分为character, double, integer以及logical。double及integer类型又被统一称为numeric类型。如果数据都为character,或者double,或者integer,或者logical,就被称为同质的(Homogeneous),否则被称为异质的(Heterogeneous)。
维度 | 同质的 | 异质的 |
---|---|---|
1维 | Atomic vector | List |
2维 | Matrix | Data frame |
多维 | Array |
需要注意的是对于1维的Atomic vector,它的长度可以是0。任何单个的数据类型,都被视为atomic vector,其长度为1。
> ## 长度为0的atomic vector
> a <- integer(0)
> length(a)
## [1] 0
> ## 单个的数据,被视为长度为1的atomic vector
> b <- "a"
> length(b)
## [1] 1
> ## 查看R的预存值pi
> pi
## [1] 3.142
> ## 查看a和b的封装类
> class(a)
## [1] "integer"
> class(b)
## [1] "character"
> class(pi)
## [1] "numeric"
> ## 查看a和pi的模式
> mode(a)
## [1] "numeric"
> mode(pi)
## [1] "numeric"
> ## 查看a和pi的存贮模式
> storage.mode(a)
## [1] "integer"
> storage.mode(pi)
## [1] "double"
> ## 查看a和b的类型
> typeof(a)
## [1] "integer"
> typeof(pi)
## [1] "double"
> ## 查看预存数据letters
> str(letters)
## chr [1:26] "a" "b" "c" "d" "e" "f" "g" "h" "i" ...
下面,将介绍不同维度的数据结构,及其基本操作,比如如何获取维度的基本信息,如何获取数据的名称,如何获得数据的概要等。
老师,您好,刚看到您讲的vector这里;我试着
a<-c(1,2,3)
typeof(a) 得到的类型却是double,class(a) 类型则是numeric,为什么不是integer,请老师解答。
你可以试一下a <- c(1L, 2L, 3L)
嗯,在rstudio里试了一下,确实可以了,在网上也找到了一篇博客,专门提到了这个问题,供大家参考:http://blog.sina.com.cn/s/blog_b37ea00701018uwo.html