筱团Blog筱团のBlog

R 语言

筱团·2021-10-19 18:30·1874 次阅读

R 语言

前置#

想随便了解一下 R 语言,结果被迫入坑,一开始就被整懵了,R 三件套:R、Rtools、RStudio 的配置环境让我想起了从前配置 JAVA 的恐惧。不过后面可能会接触到 R markdown,可能对网站建设有帮助,不亏,然后可能也会用 VScode 搞 R,毕竟 RStudio 才刚碰,没有什么感情

理解的背景

R 语言是统计学家开发的,出生之初就决定了它的使命是统计计算和数据可视化,这算是 R 语言核心功能的两个大方向

对于这两个方向而言

统计计算的学习。基础都在课堂理论与专业背景上,说实话,R 语言只是提供了一个实现的平台而已,它并不该改变或者创造新的理论、模型

数据可视化方向。则稍有不同,数据可视化确实并不十分依赖数学,但是他高度依赖图形语法(分别是基础图形语法、高级图形语法、lattice 语法、ggplot2 语法),依赖可视化视觉呈现理念

关于R语言学习技能路径:

通用技能学习:

基础:数据结构、变量类型、数据导入/导出、数据合并追加、长宽转换、数据索引、切片、聚合

进阶:正则表达式、合并与分列、匹配与替换、缺失值插补、去重与排序,控制流:循环与判断

专用技能学习:

统计与分析:课本书籍

数据可视化:ggplot2 语法 + 设计 + 审美 + 创意

R 语言的优劣势是什么?

下载与配置环境#

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语言环境变量配置

Copy
# 现在环境变量中配置下面几条 R_HOME=D:\R\R-4.1.1 PATH=%R_HOME%\bin

配置 Rtools40 参考文章:官网RTools40的环境配置

Copy
# 现在环境变量中配置下面两条 RTOOLS40_HOME=D:\Rtools\rtools40 PATH=%RTOOLS40_HOME%\usr\bin # 在 RStudio 中运行下面命令 file.edit('~/.Renviron') # 将下面代码写入打开的文件中 writeLines('PATH="${RTOOLS40_HOME}\\usr\\bin;${PATH}"', con = "~/.Renviron") # 重启 # 在 RStudio 中运行下面命令 system('where make') # 若显示下面回应,则说明成功 D:\Rtools\rtools40\usr\bin\make.exe

配置 Vscode 中 R 的插件

Copy
# 在 RStudio 中运行下面命令 install.packages("languageserver")

下面是 Vscode 推荐下载的插件

直接在 Vscode 插件区下载:radian、R Debugger

Copy
# 在 RStudio 中运行命令下载 install.packages("httpgd")

检测 Rtools 与 R

Copy
# 在 cmd 输入以下命令 r rscript # 不知道为什么在 powershell 输入 r 运行不了,但 r.exe 可以运行

配置环境如下:

基础学习(混乱版)#

R 官方文档

变量赋值

feature:

  1. 有效的变量名称由字母,数字以及点号 . 或下划线 _ 组成
  2. 最新版本的 R 语言的赋值可以使用左箭头 <-、等号 = 、右箭头 -> 赋值
Copy
# 正常 myString <- "Hello, World!" print ( myString ) # Hello, World! # feature 1 var.1 = c(0,1,2,3) print(var.1) # 0 1 2 3

变量处理

Copy
# 查看变量 print(ls()) # "var.1" "var.2" "var.3" # 删除变量 rm(var.3)

cat() 函数

Copy
cat(1, "加", 1, "等于", 2, '\n') # 1 加 1 等于 2 # 输出内容到文件 cat("ACMICPC", file="C:\Users\14805\Desktop\acm.txt")

sink() 函数

feature:

  1. append 参数是追加写入,否找覆盖
  2. split 属性是依然保留控制台的输出,否找不显示
Copy
sink("r_test.txt", split=TRUE) # 控制台同样输出 for (i in 1:5) print(i) sink() # 取消输出到文件 # 1 # 2 # 3 # 4 # 5

注释

Copy
# 单行注释就是 # " 多行注释就是双引号 "

运算符

Copy
# 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 函数当取整位是偶数的时候,五也会被舍去

数据类型(太多了,只挑重点写)

Copy
# 向量 # 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

判断语句

Copy
# 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

循环

Copy
# 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"

函数

Copy
# 通用公式 " 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 # 函数还可以传入函数,格式就是将函数名传入即可

字符串

Copy
c <- "双引号字符串中可以包含单引号(') " print(c) d <- '单引号字符串中可以包含双引号(") ' print(d)

文件脚本

feature:

后缀为 .R

后话#

整体感觉和 python 无异,基础都一样,难的地方还没开始学,以后再说...

既然适用于统计和绘制,感觉 python 完全可以替代,但是语法虽然差不多,但是社区开源的包不同嘛,所以条件适宜的话,还是两个都学吧,毕竟这些都只是工具而不是思想~

预学习#

RMarkdown:基础语法和用法blogdown 网站

posted @   筱团  阅读(1874)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示
目录