R 语言学习笔记
这是我高中时期学习R语言时做的入门笔记,发出来当个备份。
我本人现在并不使用R!
一、基础操作与环境
- 文件后缀 :
.R - 赋值 :
<-(常用),也支持=、->、-->(箭头总是指向变量) - 输出/退出 :
print()输出(无分号结尾);q()退出交互式环境 - 变量名规则 :由字母、数字、点号
.或下划线_组成 - 变量管理 :
ls():列出所有已定义的变量rm(a):删除变量 a
- 脚本执行 :
Rscript 文件.R - 字符串拼接 :
cat(a, b, ...),自动加空格间隔file参数:将内容输出到指定文件append = TRUE:以追加写入方式输出
- 输出重定向 :
sink(file):之后所有控制台输出转移到该文件sink(file, split = TRUE):同时输出到控制台和文件- 无参
sink():取消之前的重定向设置
- 生成序列 :
1:5生成 1~5 的数 - 文件读取 :
readLines(t)读取文件 t 的内容 - 工作目录 :
getwd():获取当前工作目录setwd():设置当前工作目录
- 注释 :
- 单行注释:
# - 多行注释:R 没有专门的多行注释语法
- 单行注释:
二、运算符
数学运算符
优先级从高到低:
():括号^:乘方运算%%:整除求余%/%:整除*:乘法/:除法+:加法-:减法
关系运算符
>:大于<:小于==:等于!=:不等于>=:大于等于<=:小于等于TRUE/FALSE:布尔值
逻辑运算符
&:元素逻辑与,比较向量中的每一个元素|:元素逻辑或,比较向量中的每一个元素!:逻辑非,比较向量中的每一个元素&&:逻辑与,只对两个向量的第一个元素进行判断||:逻辑或,只对两个向量的第一个元素进行判断
其他特殊运算符
%in%:成员运算符,判断元素是否在向量中%*%:矩阵乘法(矩阵与其转置相乘等)
三、数学与统计函数
sqrt(n):平方根exp(n):自然常数 e 的 n 次方log(m, n):以 n 为底 m 的对数log10(m):以 10 为底 m 的对数,等同log(m, 10)round(n):四舍五入取整round(n, m):保留 m 位小数,四舍五入ceiling(n):向上取整floor(n):向下取整- 三角函数:
sin()、cos()、tan() - 反三角函数:
asin()、acos()、atan() - 统计相关:
dnorm():概率密度函数pnorm():概率密度积分函数qnorm():分位数函数rnorm(m, n, q):生成 m 个均值为 n、标准差为 q 的正态分布随机数
四、数据类型与对象
- R 语言区分大小写
- 基本数据类型:数字(numeric)、逻辑(boolean)、文本(string)
- 基本对象 :
- 向量(vector):线性表
- 列表(list):可包含不同类型元素的集合
- 矩阵(matrix):二维数组
- 数组(array)
- 因子(factor)
- 数据框(data frame):二维列表,类似表格
常量
NA:表示缺失值(占位符)NULL:表示不存在
五、向量操作
- 创建向量:
c() - 元素提取:通过下标索引
- 排序相关:
sort():排序rev():反转order():返回排序后的索引下标
- 统计函数:
sum():求和mean():求平均值var():方差sd():标准差min():最小值max():最大值range():返回最小值和最大值
- 生成序列:
seq(m, n, q):从 m 到 n 公差为 q 的等差数列,可用length.out指定长度rep(m, n):生成 n 个 m
- 筛选与逻辑检查:
while(a):返回向量 a 中所有为 TRUE 的元素下标(注:通常用which())all():检查逻辑向量是否全部为 TRUEany():检查逻辑向量是否含有 TRUE
六、字符串处理
- 大小写转换:
toupper():转大写tolower():转小写
- 长度计算:
nchar(c, type = "bytes"):统计字节长度;type = "char"统计字符个数
- 截取:
substr(c, m, n):从 m 到 n 截取substring(c, m):从 m 截取到末尾
- 类型转换:
as.numeric():字符串转数字as.character():数字转字符串
- 拆分:
strsplit(c, t):以 t 为分隔符拆分字符串 c - 替换:
gsub(m, n, c):将字符串 c 中的 m 替换为 n - 连接:
paste(..., sep = " ", collapse = NULL):用指定分隔符连接字符串,sep为元素间分隔符,collapse用于连接后再次拼接format(x, digits, nsmall, scientific, width, justify):格式化字符串
- 计数:
nchar(x)计算字符串或列表长度 - 截取:
substring(x, first, last)
七、矩阵与数组
- 创建矩阵:
matrix(v, m, n):以向量 v 按列生成 m 行 n 列的矩阵;byrow = TRUE时按行填充;dimnames设置行列名称
- 行列名:
colnames(j):获取或设置列名rownames(j):获取或设置行名
- 线性方程求解:
solve(A, b),A 为系数矩阵,b 为常数向量/矩阵 - 跨维度计算:
apply(j, m, f),m=1 行操作,m=2 列操作 - 矩阵转置:
t()实现矩阵行列互换 - 数组创建:
array(data = NA, dim = length(data), dimnames = NULL),data 为向量,dim 指定维度,dimnames 为维度名称列表
- 数组计算:
apply(x, margin, fun)跨维度应用函数
八、列表与因子
-
列表
list():创建列表names():给列表元素命名unlist():将列表转换为向量
-
因子
- 创建:
factor(x = character(), levels, labels = levels, exclude = NA, ordered = is.ordered(x), nmax = NA)x:向量levels:指定水平值labels:水平的标签exclude:排除的字符ordered:是否有序nmax:水平上限数量
- 判断因子:
is.factor(x) - 生成因子水平:
gl(n, k, length = n*k, labels = seq_len(n), ordered = FALSE)n: 水平个数;k: 每个水平重复次数;length: 设置长度;labels: 水平值;ordered: 是否有序
- 创建:
九、数据框
-
创建数据框:
rdata.frame(..., row.names = NULL, check.rows = FALSE, check.names = TRUE, fix.empty.names = TRUE, stringsAsFactors = default.stringsAsFactors())...:列向量,以 tag=value 形式给出row.names:行名check.rows/check.names:检查行/列名合法性stringsAsFactors:字符是否自动转为因子
-
数据框常用操作:
-
str(x):展示数据结构 -
summary():显示概要信息 -
cbind():将多个向量按列合并为数据框 -
rbind():按行合并两个数据框 -
$:数据框成员运算符,提取列 -
ncol():列数 -
nrow():行数 -
is.data.frame(a):判断是否为数据框 -
subset(a, b):按条件筛选行(多条件用&) -
合并数据框:
rmerge(x, y, by = intersect(names(x), names(y)), by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all, sort = TRUE, suffixes = c(".x",".y"), no.dups = TRUE, ...) -
重塑数据(reshape2 包):
melt(data, ..., na.rm = FALSE, value.name = "value"):将宽数据堆叠为长格式dcast(data, formula, ...)还原为数据框;acast(data, formula, ...)还原为向量/矩阵/数组
-
十、流程控制
判断语句
if语句if...else语句switch语句:根据第一参数返回对应的值
循环类型
repeat:块循环while:条件循环for:范围循环
循环控制
break:跳出循环next:继续下一次迭代
函数定义
- 关键字
function,返回值用return()
十一、数据读写
CSV / 文本
- 读取:
read.csv("XXX.csv", encoding = "UTF-8"),返回数据框 - 写入:
write.csv(a, "XXX.csv")
Excel(需安装 xlsx 包)
- 安装:
install.packages("xlsx", repos = "https://mirrors.ustc.edu.cn/CRAN/") - 读取:
read.xlsx()
XML(需安装 XML 包)
- 安装:
install.packages("XML", repos = "https://mirrors.ustc.edu.cn/CRAN/") - 解析:
xmlParse(file = "XXX.xml") - 根节点:
xmlRoot() - 节点数量:
xmlSize() - 转列表:
xmlToList() - 转数据框:
xmlToDataFrame()
JSON(需安装 rjson 包)
- 安装:
install.packages("rjson", repos = "https://mirrors.ustc.edu.cn/CRAN/") - 读取:
fromJSON(file = "XXX.json") - 转数据框:
as.data.frame()
MySQL / MariaDB
- MySQL 扩展包:
RMySQL - MariaDB 扩展包:
RMariaDB - 查询:
dbSendQuery() - 获取结果集:
fetch()
十二、扩展包管理
- 查看安装目录:
.libPaths() - 查看已载入包:
search() - 安装包:
install.packages("包名") - 加载包:
library(包名),无参查看已安装的包
十三、绘图基础
图形设备
png()、jpeg()、bmp():设置输出图片格式dev.off():关闭绘图设备- 中文字体:设置参数
family = 'GB1'
饼图
r
pie(x, labels = names(x), edges = 200, radius = 0.8,
clockwise = FALSE, init.angle = if(clockwise) 90 else 0,
density = NULL, angle = 45, col = NULL, border = NULL,
lty = NULL, main = NULL, ...)
x:数值向量,表示面积labels:扇区标签col:颜色main:标题- 3D 饼图:需安装
plotrix包,使用pie3D()
条形图
r
barplot(H, xlab, ylab, main, names.arg, col, beside)
H:数值向量或矩阵beside = FALSE:堆叠条形图beside = TRUE:并列条形图
字体相关(showtext 包)
showtext_begin()/showtext_end():开启/关闭字体渲染showtext()、font_add():载入自定义字体
函数图
r
curve(expr, from = NULL, to = NULL, n = 101, add = FALSE,
type = "l", xname = "x", xlab = xname, ylab = NULL,
log = NULL, xlim = NULL, ...)
散点图
r
plot(x, y, type = "p", main, xlab, ylab, xlim, ylim, axes)
type可选:p(点)、l(线)、b(点线)、c(仅线)、o(点线且线穿过点)、h(垂直线)、s/S(阶梯图)、n(空图)
散点图矩阵
r
pairs(formula, data)
十四、统计模型
- 均值:
mean(x, trim = 0, na.rm = FALSE)trim:去除异常值比例(0~0.5)na.rm:是否忽略缺失值
- 中位数:
median(x, na.rm = FALSE) - 线性回归:
lm(formula, data)formula:例如y ~ x
- 模型概要:
summary(lm 对象) - 预测:
predict(object, newdata)object:来自lm()的模型newdata:待预测的数据
十五、杂项工具函数
- 判断整数:
is.integer(x) - 其他工具:
Rserve扩展包(install.packages("Rserve"))等
------谙弆悕博士(Ailan Anjuxi)