前置
想随便了解一下 R 语言,结果被迫入坑,一开始就被整懵了,R 三件套:R、Rtools、RStudio 的配置环境让我想起了从前配置 JAVA 的恐惧。不过后面可能会接触到 R markdown,可能对网站建设有帮助,不亏,然后可能也会用 VScode 搞 R,毕竟 RStudio 才刚碰,没有什么感情
理解的背景
R 语言是统计学家开发的,出生之初就决定了它的使命是统计计算和数据可视化,这算是 R 语言核心功能的两个大方向
对于这两个方向而言
统计计算的学习。基础都在课堂理论与专业背景上,说实话,R 语言只是提供了一个实现的平台而已,它并不该改变或者创造新的理论、模型
数据可视化方向。则稍有不同,数据可视化确实并不十分依赖数学,但是他高度依赖图形语法(分别是基础图形语法、高级图形语法、lattice 语法、ggplot2 语法),依赖可视化视觉呈现理念
通用技能学习:
基础:数据结构、变量类型、数据导入/导出、数据合并追加、长宽转换、数据索引、切片、聚合
进阶:正则表达式、合并与分列、匹配与替换、缺失值插补、去重与排序,控制流:循环与判断
专用技能学习:
统计与分析:课本书籍
数据可视化:ggplot2 语法 + 设计 + 审美 + 创意
下载与配置环境
R
https://mirrors.tuna.tsinghua.edu.cn/CRAN/index.html
Rtools40
https://mirrors.tuna.tsinghua.edu.cn/CRAN/index.html
RStudio
https://www.rstudio.com/products/rstudio/download/#download
配置
由于配置 Rtools 必须要用 RStudio,所以我才下载了它
配置 R 参考文章:cmd下的R语言环境变量配置
# 现在环境变量中配置下面几条
R_HOME=D:RR-4.1.1
PATH=%R_HOME%in
配置 Rtools40 参考文章:官网、RTools40的环境配置
# 现在环境变量中配置下面两条
RTOOLS40_HOME=D:Rtools
tools40
PATH=%RTOOLS40_HOME%usrin
# 在 RStudio 中运行下面命令
file.edit('~/.Renviron')
# 将下面代码写入打开的文件中
writeLines('PATH="${RTOOLS40_HOME}\usr\bin;${PATH}"', con = "~/.Renviron")
# 重启
# 在 RStudio 中运行下面命令
system('where make')
# 若显示下面回应,则说明成功
D:Rtools
tools40usrinmake.exe
配置 Vscode 中 R 的插件
# 在 RStudio 中运行下面命令
install.packages("languageserver")
下面是 Vscode 推荐下载的插件
直接在 Vscode 插件区下载:radian、R Debugger
# 在 RStudio 中运行命令下载
install.packages("httpgd")
检测 Rtools 与 R
# 在 cmd 输入以下命令
r
rscript
# 不知道为什么在 powershell 输入 r 运行不了,但 r.exe 可以运行
配置环境如下:
基础学习(混乱版)
变量赋值
feature:
- 有效的变量名称由字母,数字以及点号 . 或下划线 _ 组成
- 最新版本的 R 语言的赋值可以使用左箭头 <-、等号 = 、右箭头 -> 赋值
# 正常
myString <- "Hello, World!"
print ( myString )
# Hello, World!
# feature 1
var.1 = c(0,1,2,3)
print(var.1)
# 0 1 2 3
变量处理
# 查看变量
print(ls())
# "var.1" "var.2" "var.3"
# 删除变量
rm(var.3)
cat() 函数
cat(1, "加", 1, "等于", 2, '
')
# 1 加 1 等于 2
# 输出内容到文件
cat("ACMICPC", file="C:Users14805Desktopacm.txt")
sink() 函数
feature:
- append 参数是追加写入,否找覆盖
- split 属性是依然保留控制台的输出,否找不显示
sink("r_test.txt", split=TRUE) # 控制台同样输出
for (i in 1:5)
print(i)
sink() # 取消输出到文件
# 1
# 2
# 3
# 4
# 5
注释
# 单行注释就是 #
"
多行注释就是双引号
"
运算符
# 1 到 10 的向量
v <- 1:10
print(v)
# 判断数字是否在向量 v 中
v1 <- 3
v2 <- 15
print(v1 %in% v)
print(v2 %in% v)
# 数学函数
sqrt(4)
# 2
exp(1)
# 2.718282
exp(2)
# 7.389056
log(2,4)
# 0.5
log10(10000)
# 4
round(1.5)
# 2
round(2.5)
# 2
round(3.5)
# 4
round(4.5)
# 4
# round 函数当取整位是偶数的时候,五也会被舍去
数据类型(太多了,只挑重点写)
# 向量
# c() 是一个创造向量的函数
> a[c(1, 3, 5)] # 取出第 1, 3, 5 项
[1] 10 30 50
> a[c(-1, -5)] # 去掉第 1 和第 5 项
[1] 20 30 40
> seq(1, 9, 2)
[1] 1 3 5 7 9
"
NA 代表的是 缺失,NULL 代表的是 不存在
NA 缺失就像占位符,代表这里没有一个值,但位置存在
NULL 代表的就是数据不存在
"
> length(c(NA, NA, NULL))
[1] 2
> c(NA, NA, NULL, NA)
[1] NA NA NA
# 逻辑型
# 没什么
# 矩阵
> m1 = matrix(c(1, 2), 1, 2)
> m2 = matrix(c(3, 4), 2, 1)
> m1 %*% m2
[,1]
[1,] 11
判断语句
# if / else /else if
# 没什么
# switch
x <- switch(
3,
"google",
"runoob",
"taobao",
"weibo"
)
print(x)
[1] "taobao"
you.like<-"runoob"
switch(you.like, google="www.google.com", runoob = "www.runoob.com", taobao = "www.taobao.com")
[1] "www.runoob.com"
> x <- switch(4,"google","runoob","taobao")
> x
NULL
循环
# repeat
v <- c("Google","Runoob")
cnt <- 2
repeat {
print(v)
cnt <- cnt+1
if(cnt > 5) {
break
}
}
[1] "Google" "Runoob"
[1] "Google" "Runoob"
[1] "Google" "Runoob"
[1] "Google" "Runoob"
# while
v <- c("Google","Runoob")
cnt <- 2
while (cnt < 7) {
print(v)
cnt = cnt + 1
}
[1] "Google" "Runoob"
[1] "Google" "Runoob"
[1] "Google" "Runoob"
[1] "Google" "Runoob"
[1] "Google" "Runoob"
# for
v <- LETTERS[1:4]
for ( i in v) {
print(i)
}
[1] "A"
[1] "B"
[1] "C"
[1] "D"
# next
v <- LETTERS[1:6]
for ( i in v) {
if (i == "D") { # D 不会输出,跳过这次循环,进入下一次
next
}
print(i)
}
[1] "A"
[1] "B"
[1] "C"
[1] "E"
[1] "F"
函数
# 通用公式
"
function_name <- function(arg_1, arg_2, ...) {
// 函数体
}
"
# 内置函数
# 输出 32 到 44 到的所有数字
print(seq(32,44))
# 计算两个数到平均数
print(mean(25:82))
# 计算 41 到 68 所有数字之和
print(sum(41:68))
[1] 32 33 34 35 36 37 38 39 40 41 42 43 44
[1] 53.5
[1] 1526
# 函数还可以传入函数,格式就是将函数名传入即可
字符串
c <- "双引号字符串中可以包含单引号(') "
print(c)
d <- '单引号字符串中可以包含双引号(") '
print(d)
文件脚本
feature:
后缀为 .R
后话
整体感觉和 python 无异,基础都一样,难的地方还没开始学,以后再说...
既然适用于统计和绘制,感觉 python 完全可以替代,但是语法虽然差不多,但是社区开源的包不同嘛,所以条件适宜的话,还是两个都学吧,毕竟这些都只是工具而不是思想~
预学习
RMarkdown:基础语法和用法、blogdown 网站