一、R语言基础
快速熟悉R语言中的基本概念,先入个门。
1、运算符
运算符 | 含义 | 例子 |
---|---|---|
+ | 加 | 1 + 1 |
- | 减 | 3 - 2 |
* | 乘 | 3 * 2 |
/ | 除 | 9 / 3 |
^(**) | 乘方 | 2 ^ 3 2 ** 3 |
%% | 取余 | 5 %% 2 |
%/% | 取整 | 5 %/% 2 |
2、赋值符号
等号 | = | a = 1 | 三者等价:把1赋值给变量a |
左箭头 | <− | a <- 1 | |
右箭头 | −> | 1 -> a |
3、基本数据类型
类型 | |
---|---|
数值型 "numeric" | class函数来探查数据的类型 |
数值型数据还可以分为:整数型(integer)和双精度型(double) 数字会被自动认为双精度型 声明使用的数据是整数型:在数值后面加上L 可以使用typeof函数查看数值型数据的具体类型 | |
逻辑型 "logical" | 大于(>)、大于或等于(>=)、 小于(<)、小于或等于(<=)、 等于(==)、不等于(!=) |
缺失值(NA)的数据类型也被归为逻辑型数据 | |
字符型 "character" | 所有文本类型的数据都属于字符型,附上双引号或单引号进行定义。 class("abc") class("复旦大学") |
可以使用“==”或“!=”符号来判断两个文本是不是完全一致 "hope" == "hope" "hope" != "Hope" | |
因子型 "factor" | 因子型,被视为把字符型数据以数值型保存的特殊格式 利用factor函数创造因子变量 a = factor("男") |
用as系列函数来进行强制类型转换,因子变量的字符形态和数值形态 as.numeric(a) as.character(a) | |
转换失败时,会返回缺失值NA,并输出警告 as.character(12345) as.numeric("hello") |
4、数据结构
向量 vector | c("你","我","他") length(c(1,3,4)) |
矩阵 matrix | matrix(1:9,nrow = 3,ncol = 3) |
a = matrix(1:12,ncol = 3) #nrow和ncol参数可以只定义一个 dim(a) #使用dim函数可以知道矩阵一共有几行几列 | |
列表 list | a = list(3,TRUE,"hello") |
数据框 data.frame | 数据框是一种特殊的二维数据结构。同为二维数据结构,与矩阵不同的是,它的每一列可以视为一个向量,而每一行则可以视为一个列表。因此在一个数据框中可以有不同的属性(以列的形式存在),每一行则代表着一个观测实体。 library(pacman) p_load(tidyfst) as_dt(iris) #利用了tidyfst包的as_dt函数,把iris转换为data.table格式 注意:<num>是numeric的缩写,<fctr>是factor的缩写) |
5、程序流程控制
选择结构 | 在只有一条执行语句的时候,不需要写花括号 |
如果需要执行多个语句,则需要加上花括号。 保险起见,应该在所有if语句和else语句之后都加上花括号. | |
ifelse函数,如满足第一个条件,执行第一项;否则,执行第二项 | |
for循环 | |
希望跳过某一个循环,例如在i等于3的时候,我们不要打印。这时候就可以使用next语句。这个类似于其他语言中的continue用法。 | |
while循环 | |
还有一种特殊的循环模式叫作repeat,它相当于while(1){…}。也就是说,这个循环如果没有内置的停止机制,就会一直运行下去,可以在里面附加条件语句来终止运行。 |
6、函数
利用function函数来定义一个函数。 所有的R函数中,我们会把函数的最后一个执行结果作为函数的返回值。 |
4.0.0版本以后的R语言支持函数的便捷写法,可以使用一个反斜杠(\)来代表函数(function)。 也可以使用return函数显式地返回一个值。 |
二、管道操作符
管道操作符(%>%)是由magrittr包提供的方便操作符,能够让数据在函数之间快速传递,避免中间变量的生成,从而减少内存的占用。
管道操作符会让之前生成的结果作为第一个参数传递到后面的函数中,即f(x)与x %>% f()是等价的
mean(1:3)
1:3 %>% mean()
当数据不是作为第一个参数传递到后面的函数,这时候可以使用“.”作为前面数据的指代来放在后面的函数中
lm(Sepal.Length~Sepal.Width,data=iris)
iris %>% lm(Sepal.Length~Sepal.Width,data=.)