Antkillerfarm Hacking V7.0

R

2018-01-28

R

R语言是另一个应用较广的数学工具语言和环境,主要应用于统计学和数据挖掘等领域。在这些领域,其影响力甚至超过了Matlab。

R语言的语法来自于1970年代贝尔实验室发明的S语言,因此又被称为“GNU S”。

官网:

https://www.r-project.org/

软件仓库:

https://cran.r-project.org/

https://r-forge.r-project.org/

安装方法:

sudo apt install r-base r-base-dev

书籍:

R语言的书籍主要有三本。

1.《An Introduction to R》。这个是官网的免费书,焦点集中于语言本身,对标准库没有介绍。

2.《R Reference Card》。一个只有几页纸的卡片式书籍,列出了应用开发中涉及的主要函数的名称。

3.《R in a Nutshell》。篇幅近600页,堪称R语言最权威书籍,兼顾语言和应用两方面。


http://yihui.name/

谢益辉,Iowa State University博士,目前就职于RStudio。中国R语言会议、COS社区创办者。

2022年7月,Rstudio改名为Posit,标志着Rstudio正式从专注于为R语言提供工具和支持,转向为面向数据科学的一系列语言提供工具和资源。

Posit后来推出的Quarto,支持多种语言,明显有逐步取代Rmarkdown的趋势。

https://www.zhihu.com/question/637962833

如何看待“谢益辉”被Posit/RStudio公司解雇,并已于2024年1月1日离职?


参考:

http://cos.name/

统计之都(Capital of Statistics,简称COS)成立于2006年5月,是一个旨在推广与应用统计学知识的网站和社区。

http://www.r-user.com/

一个中文的R语言网站

http://blog.fens.me/series-r/

R的极客理想系列文章。作者张丹,R语言资深用户,系统架构师。

http://www.r-tutor.com/

另一个大牛Chi Yau的网站。

https://ask.hellobi.com/blog/asxinyu/5721

300+的R语言资源汇总

https://mp.weixin.qq.com/s?__biz=MzA3MTM3NTA5Ng==&mid=2651056727&idx=2&sn=46e6b4cca2f8dad97774c2e666284f3a

R语言中文社区历史文章整理

http://url.cn/42zYptF

最全的训练数据集

https://mousieur-g.github.io/

一个R机器学习实战的blog

http://yanping.me/shiny-tutorial/

Shiny中文教程

https://mp.weixin.qq.com/s?__biz=MzA3Njc0NzA0MA==&mid=2653191385&idx=1&sn=23c13aa4f3ab4ffe5a902abd8fc0613e

那些年倒腾的R语言学习笔记

https://www.datasciencecentral.com/profiles/blogs/600-websites-about-r

600个R资源网站

https://mp.weixin.qq.com/s/u9n1BWazGns661imxBP-dg

使用机器学习R语言,149页pdf,Practical Machine Learning in R

交互环境

R语言有个和python类似的命令行交互环境。

安装之后,运行R命令即可进入该环境(下文简称为shell),>quit()可退出shell。

除此之外,还有第三方提供的GUI环境,最常用的是RStudio,其官网:

https://www.rstudio.com/

下载:

http://www.rstudio.org/download/latest/stable/desktop/ubuntu64/rstudio-latest-amd64.deb

执行脚本

R脚本一般以.R为后缀,其执行方法有两种:

1.Linux shell:/usr/lib/R/bin/Rscript a.R

2.R shell:source(a.R)

帮助文档

CRAN虽然提供了各个软件包的帮助文档,然而无论是数据的组织,还是界面,都不如RStudio,建议使用后者的帮助文档。

安装软件包

以rjson包为例:

install.packages("rjson")

这条命令会让你选择CRAN镜像,国内有三个镜像,速度都不错。

这一步首次做,最好在R shell上进行,RStudio不会让你选择镜像。选定之后,下次安装直接就会连到镜像上,这时使用R shell,还是RStudio,都是一样的效果了。

使用软件包:

library(rjson)

此外R还支持从github安装软件包,如下所示:

install.packages("devtools")
devtools::install_github("jlmelville/mnist")
library(mnist)

语言细节

R语言由于早期用户主要是非软件工程人员,因此,它是一个面向过程的函数式语言。

然而正如C语言向C++的演进,以及JavaScript向JQuery的演进一样,面向过程的语言经过一系列非常技巧性的封装之后,都能具备面向对象的能力。参见:

http://blog.fens.me/r-object-oriented-intro/

由于面向对象的特性比较高端,不易掌握,因此这里的讨论仍局限于面向过程领域,以C语言作为对比,列出R语言和它的区别。

注释与行

注释以#开始至行尾。没有多行注释符号,但可在RStudio中,选中相关行,进行注释。

一般情况下,一行对应一条语句。一行有多个语句时,以;分隔。一条语句分散在多行时,以+作为续行符号。

变量声明

R和python类似,变量使用前无需声明类型。

赋值

除了=之外,还可以使用<-、<<-、->、->>进行赋值。上述符号中,箭头指向的变量为被赋值的变量,因此,R不仅可以进行常规的从右向左赋值,也可进行从左向右的赋值。例如:

3->a

下标

数组(Array、Vector)下标从1开始。由于所有R变量都被当成向量,因此对于单元素的变量,aa[1]是等价的。

列表(List)的下标一般是个name。这里使用一个解析后的json文件作为示例,演示一下在复杂结构中下标的用法。

{"data":[
{"readCount":"97","title":"R1"},
{"readCount":"469","title":"R2"}
]}

假设这个json文件保存在列表json中,则"readCount":"97"需要这样引用:

json$data[[1]]$readCount

for循环

示例:

for (i in 2:5-1) {print(i)}

这里需要注意,2:5-1等价于(2:5)-1,而不是2:(5-1):-的优先级高。

返回值

return也是个函数,因此返回值两侧的括号不可省略。

字符串长度

R中的字符串不是字符数组,因此使用length是无法得到字符串长度的,应该使用nchar函数。

paste

paste可将多个字符串连接到一起。这个函数的声明很有意思:

paste (..., sep = " ", collapse = NULL)

也就是说R支持不定参数,而且该参数并不一定在最后。可用如下方式避免参数指派上的混乱:

paste("1st", "2nd", "3rd", collapse = ", ")

自定义函数

示例:

add<-function(x,y){
  return (x+y)
}

这种方式和JavaScript十分类似。

数据格式转换

as库可进行各种常见数据格式的转换,非常好使。

strDates <- c("01/05/1965", "08/16/1975")
dates <- as.Date(strDates, "%m/%d/%Y") 
strDates <- as.character(dates)

操作mysql数据库

1.安装非R依赖。

install.packages可以自动处理R依赖,然而它不能处理非R依赖。

sudo apt install libmysqlclient-dev

2.安装RMySQL包。

install.packages("RMySQL")

示例:

conn<-dbConnect(MySQL(), dbname = "ml", username="root", password="123456")
summary(conn)
query<-dbSendQuery(conn, "SELECT * FROM csdn")
data<-fetch(query, n = -1)
dbClearResult(query)
print(data)
dbDisconnect(conn)

参考:

https://mp.weixin.qq.com/s/VEKg-KEtge1L7Sa4oo2xQg

从R连接MySQL数据库

内置数据集

R语言本身已经内置了一些数据集,可以data()查看之。

操作数据集

参考:

https://www.r-bloggers.com/select-operations-on-r-data-frames/

http://www.burns-stat.com/translating-r-sql-basics/

MNIST

https://github.com/jlmelville/mnist

ggplot2

ggplot2是目前R上用的比较多的绘图工具集。官网:

http://had.co.nz/ggplot2/

参考:

《ggplot2:数据分析与图形艺术》,Hadley Wickham著。

注:Hadley Wickham,ggplot2的作者,Rstudio的首席科学家。

R Markdown

R Markdown是R Studio在Markdown基础上扩展的一种Markdown方言。

官网:

http://rmarkdown.rstudio.com/

类似的还有bookdown:

https://bookdown.org/

blogdown:

https://github.com/rstudio/blogdown

参考:

https://mp.weixin.qq.com/s/TqEXxeru_QUNCvBtW_QT3Q

基于R Markdown的演示文稿和报告模板使用经验

Renjin

Renjin是一个基于JVM的R语言实现。

官网:

http://www.renjin.org/

参考

http://blog.csdn.net/yepeng2007fei/article/details/77677625

批量读取文本文件并生成自己的肖像词云

https://mp.weixin.qq.com/s/W91sppqv3iGtaZPY99suDQ

MIT手把手教你一步步创建自己的R程序包

https://mp.weixin.qq.com/s/Gzoxa4jjWzprsSn9yRVlOg

基于自然语言识别下的流失用户预警

https://mp.weixin.qq.com/s?__biz=MzA3MTM3NTA5Ng==&mid=2651056658&idx=1&sn=ae2792da4f037eaf9038f54a11753b0c

利用算法识别糖尿病患者

https://ask.hellobi.com/blog/EasyCharts/5777

R绘制圣诞树

http://mp.weixin.qq.com/s?__biz=MzIxNjA2ODUzNg==&mid=2651435295&idx=1&sn=968d9950e54c34e2a2ddd4186c28c7c7

数据分析案例–以上海二手房为例

http://blog.csdn.net/zx403413599/article/details/46866977

R语言ggplot2包之画散点图

http://blog.csdn.net/yepeng2007fei/article/details/78975534

rvest爬取中国天气网所有城市未来七天天气数据并写入oracle数据库

http://blog.csdn.net/qazplm12_3/article/details/76474682

R学习-火山图

https://mp.weixin.qq.com/s/28bSe9pQY9r2fa8Dg3SL2g

中了数据可视化的毒:BBC如何使用R语言绘制数据图表?

https://www.rstudio.com/resources/cheatsheets/

RStudio Cheat Sheets。各种小抄,不局限于R本身。

https://www.hvitfeldt.me/2018/01/visualizing-trigrams-with-the-tidyverse/

Visualizing trigrams with the Tidyverse。一种特殊的可视化图表

https://mp.weixin.qq.com/s/Kb8d92KAz6AbIXjY9SVjGA

R语言也能使用TensorFlow了!RStudio发布全新接口

https://www.cnblogs.com/payton/p/5391680.html

R语言的高质量图形渲染库Cairo

https://mp.weixin.qq.com/s/GN0KARrvosWb7Gr_BKYhCQ

10种机器学习算法的要点(附Python和R代码)

https://zhuanlan.zhihu.com/p/22852262

经典决策树,条件推断树,随机森林,SVM的R实现

https://mp.weixin.qq.com/s/qxcQOXF89tdTBdQQ1wjjvw

叠嶂图的前世今生

https://mp.weixin.qq.com/s/GEUxw5RnbMSBAagpify3bQ

用R也可以跑Python了

https://mp.weixin.qq.com/s/GKluYqwt3O3Um630zrK7Eg

深入对比数据科学工具箱: SparkR vs Sparklyr

https://mp.weixin.qq.com/s/sTuA-S9bQzVySoI0BMz19g

三种可视化方法,手把手教你用R绘制地图网络图!

https://mp.weixin.qq.com/s/83494v_5XDPlyNIccMINtQ

美团R语言数据运营实战

https://mp.weixin.qq.com/s/57j-YxA4ODMy0RybI8n7uQ

教你在R中使用Keras和TensorFlow构建深度学习模型

https://mp.weixin.qq.com/s/ceq4vn1GcGGw-Q26dAy2hw

别迷失在森林里…

https://mp.weixin.qq.com/s/STmSnyl4vaz3WS-kJ8aUmQ

评分卡设计-变量筛选

https://mp.weixin.qq.com/s/qOZq30ua2q_avgRLZie-VQ

R语言实战之模型部署

https://mp.weixin.qq.com/s/G-6ZcMIba-fLKRN0hgQFWg

面向数据科学和AI的开发库推荐:Python、R各7个

https://mp.weixin.qq.com/s/0jKN59DMo1HmCtw8ce-y7Q

在R中估计GARCH参数存在问题

https://mp.weixin.qq.com/s/SLmyeLOp3h0bkD08WJS_Rg

如何用R绘制交互式社会网络图?

https://mp.weixin.qq.com/s/bB7583hMU9DGIc4-PMMQXw

详解线性回归、朴素贝叶斯、随机森林在R和Python中的实现应用!

https://mp.weixin.qq.com/s/Q_chMLju5YEIFncWJ2GFlw

为新手准备的现代化R包开发流程

https://mp.weixin.qq.com/s/VyuEC1M_6Wsl1KUvzVUyGA

同一个项目中让R和Python无缝工作的五种方法

Fork me on GitHub