大家好,欢迎来到IT知识分享网。
为什么要使用R
- 功能强大
- R是开源的、免费的(也有商业化版本,但是免费版足够我们使用了)
- 多平台运行
- 等等
R的获取和安装
- R可以从CRAN免费下载:https://cran.r-project.org/,这里是下载R语言内核,也就是实际运行R语言代码的程序。
- 一般而言,为了方便开发调试,我们会安装R的IDE,也就是R Studio,其分为
- R studio:https://posit.co/products/open-source/rstudio/,一般安装在个人电脑上
- R studio server:https://posit.co/products/open-source/rstudio-server/,一般安装在服务器上面。为了节省服务器资源,大部分作为服务器的Linux系统是没有安装图形化界面的。R studio server实际上就是安装在服务器上面的一套web程序,用户通过浏览器访问R studio server的网页前端,在上面进行操作,网页将命令通过HTTP或者其他网络协议回传到服务器的R studio server后端,R studio server后端再通过R语言内核执行R语言程序。
R的使用
- R是一种区分大小写的解释型语言。与解释型语言对应的是编译型语言,我们先了解一些什么是编译型语言。首先我们需要知道的一点是:计算机并不认识我们写的那些花里胡哨的代码,它只能执行机器语言文件。编译型语言会将我们写的代码编译为可执行的机器码,如C、C++等都是编译型语言,编译器在编译时会进行语法检查,语法有问题的话编译阶段就报错了。解释型语言则是在运行时才翻译为机器码,如Python、R都是解释型语言,执行一次翻译一次,即使你写的脚本后面有语法问题,也是运行到那一行的时刻才报错。
- R使用
<-
,而不是传统的=
作为赋值符号。如果你有其它编程语言基础,那这点可能得纠正一下,别搞混了。R也允许使用=
赋值,但是不推荐,在有的地方会出错。 - “当我写下这些代码的时候,上帝和我都知道这些代码的含义;一个月之后,只有上帝知道了”。R使用
#
进行注释,注释是程序员写在代码文件中的一些解释性的语言,是写给自己以及队友看的,就是为了让除了上帝之外的人也看得懂之前写的代码。 - 当我们启动一个R终端,就是开启了一个R session(会话),一次会话期间的所有数据都保存在内存中。
国际惯例
- 依据国际惯例,我们来运行一个hello world程序。为了顺带学习Linux基础知识,我安装了一个Ubuntu Server的系统,然后安装了R Studio Server,后续也会基于这个环境进行演示。
- 使用R studio运行hello world程序,hello world程序不仅是象征性的,还能检测你环境是否配置成功~
- 首先我们养成一个好习惯:使用R studio项目来区分不同的代码。平时写代码时,你可以一个课题新建一个项目,或者一个章节新建一个项目。这里我新建一个项目,名称为day1。
something <- 'hello world!' print(something)
- 书上的示例代码
# 创建数据集 age <- c(1,3,5,2,11,9,3,9,12,3) weight <- c(4.4,5.3,7.2,5.2,8.5,7.3,6.0,10.4,10.2,6.1) # 计算均值 mean(weight) # 计算标准差 sd(weight) # 计算相关系数 cor(age,weight) # 绘制散点图 plot(age,weight)
获取帮助
- 这里的获取帮助指的是查看函数的使用教程,一般好的R包,都会配有完整的示例代码与教程。如上面的示例代码中,sd函数是干什么的?我们可以这样查看
?sd
工作空间
- 工作空间就是当前的工作环境,存储着用户的变量数据。无论是终端还是Rstudio,退出当前session时都会询问是否保留当前镜像。
- 我们可以使用tree命令(需要使用Linux终端进入到项目目录下执行)看看一个R的项目里面一般都有哪些文件。可以看到,工作空间的镜像是保存到.RData里面的。退出session时保存为镜像,就是将内存中的数据写到硬盘里面。开启session时加载镜像,就是将硬盘的数据从硬盘加载到内存,也就是数据的序列化以及反序列化的过程。
- 工作空间的镜像一般都是保存到工作目录里面的,如果你使用了R的项目,工作目录就是项目的路径下,否则就是家目录(/home/你的用户名/)。你可以通过下面的方式查看、指定工作目录。(但是我不推荐自行配置工作目录,而是使用项目来区分和管理工作空间)
# 查看 getwd() # 设置 setwd("你指定的目录")
- 你也可以手动指定将镜像保存到哪里,以及从哪里加载镜像。
# 保存工作目录全部对象到指定文件 save.image("/home/equator/r/test.RData") # 保存指定对象到指定文件 save(list = c("age","something","weight"), file = "/home/equator/r/test2.RData") # 加载 load("/home/equator/r/test.RData")
- 其它的一些管理工作空间的命令
# 列出所有对象 ls() # 删除某个对象 rm(xx)
输入输出
这里的输入输出是相对于R内核而言的,输入即给R内核下达指令,输出即R内核将结果输出到某个地方,这些地方包括文本、PNG、PDF等文件。
- 输入
- 进入R交互会话(如在Linux终端键入R)后,可以从键盘输入
- 也可以输入一个脚本文件,使用
source("test.R")
即可
- 输出
- 文本输出,键入
sink("test_out.txt")
后,所有输出都会重定向到指定的文件中;键入sink()
即可关闭重定向 -
sink("test_out.txt") a <- c("hello", "input", "output") print(a) sink()
- 文本输出,键入
- 图像输出,键入
pdf("test.png")或者png("test.png")
后,所有图像输出都会重定向到指定文件,键入dev.off()
即可关闭重定向 - 结合前面的例子练习一下,可以看到,文本输出与图像输出各论各的,互不干扰。
-
# append=T,追加内容而不是直接覆盖,split=T,控制台与文件都输出 sink("io_example_out.txt", append=TRUE, split=TRUE) pdf("test.pdf") png("test.png") age <- c(1,3,5,2,11,9,3,9,12,3) weight <- c(4.4,5.3,7.2,5.2,8.5,7.3,6.0,10.4,10.2,6.1) print(mean(weight)) sd(weight) cor(age,weight) plot(age,weight) sink() dev.off()
包
一门成熟的语言,不仅仅需要其自身强大,还需要其有良好的生态,R语言也不例外。我们可以下载许许多多的模块来拓展R的功能,这些模块是函数、数据、预编译代码的组合,也被叫做R包(package)。计算机上存储R包的目录叫做库(library)。
- 一些R包相关的函数
# 显示库所在的位置 .libPaths() # 显示库中有那些包 library() # 查看哪些包已经加载且可以使用 search() # 查看已安装的包、安装位置、版本信息 installed.packages()
- R包的安装:可以看这个文章,更全面 。
- R包的加载:使用
library("xxx")
加载指定的R包,在一个session中,包只需载入一次。这也说明,如果你想取消加载所有后来加载的R包,重启session即可。
help(package="包名")
,可以通过help函数查看R包的官方使用教程,如果你安装的是小众的包,R包作者压根没写教程,那你只能啃源码了。。。
通过终端执行R脚本(批处理)
- 终端执行
R CMD BATCH [options] infile [outfile]
- options,可选的,指定控制执行的细节
- infile,输入文件,即R脚本,后缀一般是.R
- outfile,可选的,输出文件,后缀一般是.Rout
- 尝试执行批处理,编辑
batch.R
文件如下
cnt <- 0; while(cnt < 60) { cnt <- cnt+1; # 睡眠1秒,避免循环太快结束 Sys.sleep(1); print(cnt); }
- 批处理执行
- 此时在另外一个终端打开输出文件
tail -f batch.Rout
,可以动态地看到程序在不断地输出内容。(由于我们没有指定outfile
,所以R自动创建了这样一个文件:从infile
中获取文件名,拓展名为.Rout
)
R CMD BATCH batch.R &
,加上&后是非阻塞的,但是不代表是后台执行,断开执行脚本的那个ssh连接后,程序会终止运行。
执行
R CMD BATCH batch.R
后会阻塞等待执行完毕
结语
- 在本章中,我们学习了R、R Studio的基本界面、工作空间的管理、基本的输入输出以及R包等基础概念。但是我们好像还写不出什么复杂的代码,因为我们还没有学习到数据结构,条件控制等概念,让我们一起期待下一章节!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/143426.html