从2018年秋季(大二上学期)开始接触R语言,曾在2019年寒假读过一遍本书的第一版,感觉受益匪浅,之后遇到问题也曾回头来查阅这本书,前几天刚学习过Simulink,趁现在有空再来温习这本书,回顾一下代码和各种命令,简单记录。
虽然感觉R的功能和用途不如MATLAB广泛,但是需要派上用场的时候如果能熟练地运用真的是很好的体验。
R用方括号[ ]引用数组元素,而MATLAB用圆括号( ),同时使用它俩的时候总搞混;
R不需要分号来结束语句;
如果之前运行过多行代码,R在Console中输入↑可同时得到多行,MATLAB在Command Window中输入↑只能得到单行。
但是它们还是有很多相似之处的:
数组下标从1开始,哈哈,和C、Python等不同;
都有交互式命令窗口,工作空间;
都有实时脚本等,很多很多……
随着个人电脑将计算变得廉价且便捷,现代数据分析的方式发生了变化。与过去一次性设置好完整的数据分析过程不同,现在这个过程已经变得高度交互化,每一阶段的输出都可以充当下一阶段的输入。
1.1 为何要使用R
R也是一种为统计计算和绘图而生的语言和环境,它是一套开源的数据分析解决方案,由一个庞大且活跃的全球性研究型社区维护。
免费
功能全面
更新快
绘图强大
交互式,方便操作
数据导入导出方便
语言自然简单
可以被整合到其他语言编写的应用程序中
可运行于多种平台之上
1.2 R的使用
1.2.1 获取帮助
对于R来说,对象可以是任何东西(数据、函数、图形、分析结果,等等)。
使用函数c()以向量的形式输入数据,用mean()、sd()和cor()函数可以分别获得变量的均值和标准差,以及变量和变量之间的相关度。
函数q()将结束会话并允许你退出R,或者在RStudio中使用Ctrl+Q。
help.start() 打开帮助文档首页
help(“foo”)或?foo 查看函数 foo 的帮助(引号可以省略)
example(“foo”) 函数 foo 的使用示例(引号可以省略)
help.search(“foo”)或??foo 以 foo 为关键词搜索本地帮助文档
RSiteSearch(“foo”) 以 foo 为关键词搜索在线文档和邮件列表存档
apropos(“foo”, mode=”function”) 列出名称中含有 foo 的所有可用函数
data() 列出当前已加载包中所含的所有可用示例数据集
例如:
> library(car) 载入需要的程辑包:carData Warning message: 程辑包‘car’是用R版本3.5.2 来建造的 > data()
vignette() 列出当前已安装包中所有可用的 vignette 文档
vignette(“foo”) 为主题 foo 显示指定的 vignette 文档
1.2.2 工作空间
工作空间(workspace)就是当前R的工作环境,它存储着所有用户定义的对象(向量、矩阵、函数、数据框、列表)。
getwd() 显示当前的工作目录
setwd(“mydirectory”) 修改当前的工作目录为 mydirectory
注意R中使用正斜杠/分隔目录而不是反斜杠。R将反斜杠()作为一个转义符。
注意:函数setwd()不会自动创建一个不存在的目录。如果必要的话,可以使用函数dir.create()来创建新目录,然后使用setwd()将工作目录指向这个新目录。
如上图所示,修改目录到桌面后,控制台(Console)上方显示当前目录。注:在RStudio的菜单栏Tools→Global Options→General的Default working directory可以修改默认工作目录。
ls() 列出当前工作空间中的对象
类似于Linux的操作命令。
rm(objectlist) 移除(删除)一个或多个对象
类似于MATLAB中的clear。
help(options) 显示可用选项的说明
options() 显示或设置当前选项
例如设置输出小数位数:
> x=rnorm(3) > x [1] -0.1284972 0.1003854 -1.8987649 > options(digits=3) > x [1] -0.128 0.100 -1.899
savehistory(“myfile”) 保存命令历史到文件 myfile 中(默认值为.Rhistory)
loadhistory(“myfile”) 载入一个命令历史文件(默认值为.Rhistory)
save.image(“myfile”) 保存工作空间到文件 myfile 中(默认值为.RData)
load(“myfile”) 读取一个工作空间到当前会话中(默认值为.RData)
或者直接选择用RStudio打开.RData文件。
save(objectlist, file=”myfile”) 保存指定对象到一个文件中
1.2.3 输入和输出
启动R后将默认开始一个交互式的会话,从键盘接受输入并从屏幕进行输出。不过你也可以处理写在一个脚本文件(一个包含了R语句的文件)中的命令集并直接将结果输出到多类目标中。
source(“filename”) 在当前会话中执行一个脚本
sink(“filename”)将输出重定向到文件filename中
默认情况下,如果文件已经存在,则它的内容将被覆盖。使用参数append=TRUE可以将文本追加到文件后,而不是覆盖它。参数split=TRUE可将输出同时发送到屏幕和输出文件中。不加参数调用命令sink()将仅向屏幕返回输出结果。
例如:
sink("sink-examp.txt") i <- 1:10 outer(i, i, "*") sink()
上述代码将输出保存到sink-examp.txt文件中。
注:直接在R脚本中写入sink、貌似不起作用(比如讲上面4行放在.R文件中再source它),sink语句需要写到R脚本外,即控制台中。
cat()
Outputs the objects, concatenating the representations. cat performs much less conversion than print.
cat is useful for producing output in user-defined functions.
cat(… , file = “”, sep = ” “, fill = FALSE, labels = NULL, append = FALSE)
fill:a logical or (positive) numeric controlling how the output is broken into successive lines. If FALSE (default), only newlines created explicitly by ”
” are printed. Otherwise, the output is broken into lines with print width equal to the option width if fill is TRUE, or the value of fill if this is numeric. Non-positive fill values are ignored, with a warning.
labels:character vector of labels for the lines printed. Ignored if fill is FALSE.
example:
i<-1:10 text<-c("a","b","c","d") cat(i,file="i.txt",sep="-",fill=10,labels=text)
Output:
图形输出:
bmp(“filename.bmp”) BMP 文件
jpeg(“filename.jpg”) JPEG 文件
pdf(“filename.pdf”) PDF 文件
png(“filename.png”) PNG 文件
postscript(“filename.ps”) PostScript 文件
svg(“filename.svg”) SVG 文件
win.metafile(“filename.wmf”) Windows 图元文件
例如:
i <- 1:10 bmp("ii.bmp") plot(i,i) dev.off()
以上代码将图像保存到ii.bmp中。
1.3 包
包(package)可从http://cran.r-project.org/web/packages下载。
包是R函数、数据、预编译代码以一种定义完善的格式组成的集合。计算机上存储包的目录称为库(library)。函数.libPaths()能够显示库所在的位置, 函数library()则可以显示库中有哪些包。
R自带了一系列默认包(包括base、datasets、utils、grDevices、graphics、stats以及methods),它们提供了种类繁多的默认函数和数据集。其他包可通过下载来进行安装。安装好以后,它们必须被载入到会话中才能使用。命令search()可以告诉你哪些包已加载并可使用。
> .libPaths() [1] "D:/R/R-3.5.1/library" > search() [1] ".GlobalEnv" "tools:rstudio" [3] "package:stats" "package:graphics" [5] "package:grDevices" "package:utils" [7] "package:datasets" "package:methods" [9] "Autoloads" "package:base"
install.packages() 安装一个包
update.packages() 更新已经安装的包
library() 载入一个包
help(package=”package_name”)
1.4 批处理
reference: https://blog.revolutionanalytics.com/2009/06/running-scripts-with-r-cmd-batch.html
R CMD BATCH myscript.R myscript.Rout
#example.R clotting <- data.frame( u = c(5,10,15,20,30,40,60,80,100), lot1 = c(118,58,42,35,27,25,21,19,18), lot2 = c(69,35,26,21,18,16,13,12,12)) cat("Model data: ") print(clotting) warning("Model starting") obj <- glm(lot1 ~ log(u), data=clotting, family=Gamma) cat(" Estimated parameters: ") coef(summary(obj))
PS C:Userslenovo> cd Desktop PS C:UserslenovoDesktop> D:RR-3.5.1inR.exe CMD BATCH example.R example.Rout
Output in example.Rout:
R version 3.5.1 (2018-07-02) -- "Feather Spray" Copyright (C) 2018 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 (64-bit) R是自由软件,不带任何担保。 在某些条件下你可以将其自由散布。 用'license()'或'licence()'来看散布的详细条件。 R是个合作计划,有许多人为之做出了贡献. 用'contributors()'来看合作者的详细情况 用'citation()'会告诉你如何在出版物中正确地引用R或R程序包。 用'demo()'来看一些示范程序,用'help()'来阅读在线帮助文件,或 用'help.start()'通过HTML浏览器来看帮助文件。 用'q()'退出R. [原来保存的工作空间已还原] > clotting <- data.frame( + u = c(5,10,15,20,30,40,60,80,100), + lot1 = c(118,58,42,35,27,25,21,19,18), + lot2 = c(69,35,26,21,18,16,13,12,12)) > cat("Model data: ") Model data: > print(clotting) u lot1 lot2 1 5 118 69 2 10 58 35 3 15 42 26 4 20 35 21 5 30 27 18 6 40 25 16 7 60 21 13 8 80 19 12 9 100 18 12 > warning("Model starting") Warning message: Model starting > obj <- glm(lot1 ~ log(u), data=clotting, family=Gamma) > cat(" Estimated parameters: ") Estimated parameters: > coef(summary(obj)) Estimate Std. Error t value Pr(>|t|) (Intercept) -0.01655438 0.0009275466 -17.84749 4.279149e-07 log(u) 0.01534311 0.0004149596 36.97496 2.751191e-09 > > proc.time() 用户 系统 流逝 0.25 0.20 0.36
At the same time we can get a file with the suffix .RData.
Or we can just write the following two lines to a .bat file and double-click to run it.
cd C:UserslenovoDesktop D:RR-3.5.1inR.exe CMD BATCH example.R example.Rout
Rscript
与上述方法不同的是,Rscript可以传入参数,其中options的选项取值是相同的。
#example.R argv<-commandArgs(TRUE) x<-as.numeric(argv[1]) y<-as.numeric(argv[2]) cat("x=",x," ") cat("y=",y," ") cat("x+y=",x+y," ") cat("x^y",x^y," ")
PS C:Userslenovo> cd Desktop PS C:UserslenovoDesktop> D:RR-3.5.1inRscript.exe example.R 1 2 >output.ROut
Output in output.Rout:
x= 1 y= 2 x+y= 3 x^y 1
1.5 结果的重用
lmfit <- lm(mpg~wt, data=mtcars)
summary(lmfit) 显示分析结果的统计概要
plot(lmfit) 生成回归诊断图形
总结