接着上一篇来介绍。第一周课的内容还没有总结完,争取有所收获。关于如何安装R以及可选安装的RStudio等,这里不做介绍了。市面上有很多中英文教材了,我也是看着那些教材教程过来的,网络上的资源更是丰富,我遇到的很多偏门的问题都可以搜索到,所以我只是在踏着前辈们走过的路再走一遍而已。我写这个教程的目的:
- 为上课做好笔记
- 梳理R相关的基础知识
- 分享自己的学习心得体会
- 与其他初学者一起交流
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,其中可以是
numeric
logical
character
complex
等。如下,
> 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把某类向量转化为另一类,则会得到NA
s。如,
> 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,会耗费很长时间,其实就是类似的对对象、向量等基础知识一知半解造成的。如今,返回来再看这个会给自己建立一个体系,饶有趣味。