菜鸟学R语言:用R做数据分析(零基础)之数据类型

September 30, 2013

Tags:菜鸟学R语言

接着上一篇来介绍。第一周课的内容还没有总结完,争取有所收获。关于如何安装R以及可选安装的RStudio等,这里不做介绍了。市面上有很多中英文教材了,我也是看着那些教材教程过来的,网络上的资源更是丰富,我遇到的很多偏门的问题都可以搜索到,所以我只是在踏着前辈们走过的路再走一遍而已。我写这个教程的目的:

  1. 为上课做好笔记
  2. 梳理R相关的基础知识
  3. 分享自己的学习心得体会
  4. 与其他初学者一起交流 <!--more-->

R 基础知识

四则运算

# Basic mathematical operations
3 + 4
5 * 5
12 / 3
5^5

这几行代码就充分展现出了R的优势之一,即时互动。大家只要在console中输入以上一行代码,就可以直接得到结果,省去了传统语言编译的过程(并不是说R中不存在编译)。

> 3 + 4
[1] 7
> 5 * 5
[1] 25
> 12 / 3
[1] 4
> 5^5
[1] 3125

以上就是运行结果。


R object (R 的对象)

vector (向量)

向量(vector)是R中最基本的对象。R的对象中大部分能且只能包含同一类的若干个元素,但是list除外,可以包含若干类的若干个元素,这也是为什么要有list的原因。常见的向量有:

  • 字符向量
  • 数值向量
  • 整数向量
  • 复数向量
  • 逻辑向量

下面来创建一个含有数值1,3,5,7的向量

> v <- c(1,3,5,7) #c() 是combine,集合的意思
> x <- c(0.5, 0.6) ## numeric
> x <- c(TRUE, FALSE) ## logical
> x <- c(T, F) ## logical
> x <- c("a", "b", "c") ## character
> x <- 9:29 ## integer
> x <- c(1+0i, 2+4i) ## complex

但,如果把两种向量c()到一起,会得到什么样的向量集合呢?

> y <- c(1.7, "a") ## character
> y <- c(TRUE, 2) ## numeric
> y <- c("a", TRUE) ## character

你会发现,这时向量集会被强制(coercion)转成同一类,为了符合向量的定义。这时,如果你需要提取其中的假向量用于运算,那就需要as.**functions,其中**可以是numericlogicalcharactercomplex等。如下,

> x <- 0:6
> class(x) #class()用于查看向量的类
[1] "integer"
> as.numeric(x)
[1] 0 1 2 3 4 5 6
> as.logical(x)
[1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE
> as.character(x)
[1] "0" "1" "2" "3" "4" "5" "6"
> as.complex(x)
[1] 0+0i 1+0i 2+0i 3+0i 4+0i 5+0i 6+0i

如果使用as.**function把某类向量转化为另一类,则会得到NAs。如,

> x <- c("a", "b", "c")
> as.numeric(x)
[1] NA NA NA
Warning message:
NAs introduced by coercion
> as.logical(x)
[1] NA NA NA

有时你可能还需要空白向量,可以用vector()来创建,例如创建一个长度为10的数值向量x

> x <- vector("numeric", length = 10)
> x
[1] 0 0 0 0 0 0 0 0 0 0

matrix (矩阵)

矩阵(pl. matrices)具有维度(dimension)属性(attribute)的向量。该维度属性本身是一个长度为2的整数向量(nrow,ncol),行数和列数。

> m <- matrix(nrow = 2, ncol = 3)
> m
[,1] [,2] [,3]
[1,] NA NA NA
[2,] NA NA NA
> dim(m)
[1] 2 3
> attributes(m)
$dim
[1] 2 3

在R中建矩阵是遵从列优先(column-wise)的原则,即,优先按照顺序从左上角开始向右一列一列地填充。如,

> m <- matrix(1:6, nrow = 2, ncol = 3)
> m
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6

在了解了这个特性之后,我们就可使用dim()来为向量集创建矩阵了,大家只要注意列优先原则即可,如,

> m <- 1:10
> m
[1] 1 2 3 4 5 6 7 8 9 10
> dim(m) <- c(2, 5)
> m
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10

此外,在R中,你也可以使用cbind()(column-binding)和rbind()(row-binding)functions来创建矩阵。如,

> x <- 1:3
> y <- 10:12
> cbind(x, y)
x y
[1,] 1 10
[2,] 2 11
[3,] 3 12
> rbind(x, y)
[,1] [,2] [,3]
x 1 2 3
y 10 11 12

好了,今天就到这里吧,可能这种方式对那些以结果为导向的初学者来说,进度太慢,而且枯燥乏味吧。但是,我想对于想要学好R的零基础同学来说,这样会给大家一个更全面完整的认识吧。我个人认为,还是好好了解这些基础知识更好点,因为我之前就是结果导向,有时为了除bug,会耗费很长时间,其实就是类似的对对象向量等基础知识一知半解造成的。如今,返回来再看这个会给自己建立一个体系,饶有趣味。

· The end ·