这学期选修了回归分析,恰巧大作业要用到R语言去实现,便把积灰已久的RStudio重新寻找了回来。R软件是统计课程的得力工具(数学专业算是,医学专业的话可能更多的是用SAS,SPSS等),如何快速地上手这门实用的软件呢?接下来,我将从我的使用经验与参考书来讲一讲。
百度百科对R的评价为:R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
在这里我想点赞一下GNU源代码开放精神(与正文内容无关,读者选择性阅读),这种源代码开放的精神,一般被称为 open source,这种观念源于Richard Stallman。他认为私藏源代码是一种违反人性的罪恶行为。他认为如果与他人分享源代码,便可以让其他人从中学习,并回馈给原始创作者。封锁源代码虽然可以程度不一地保障 “ 智慧可能衍生的财富 ”,却阻碍了使用者从中学习和修正错误的机会。Stallman于1984年离开麻省理工学院,创立自由软件基金会,写下了著名的GNU宣言,开始名为GNU的开放改革计划。GNU这个名称是计算机族的幽默展现,代表了 GUN is Not Unix。当时Unix是计算机界的主流操作系统,由AT&T实验室创造,这原本只是一个学术上的练习产品,AT&T将它分享给许多研究人员,但是当所有研究与分享使这个产品越变越美好时,AT&T开始思考是否追加投资,并对从中获利抱以预期。于是开始要求大学校园内的相关研究人员签约,要求他们不得公开或透露UNIX源代码。Stallman将AT&T的这种行为视为思想钳制,以及一种伟大传统的沦陷。在此之前,计算机界的氛围是大家无限制地共享个人成果(当然是指最初的源代码)
上文有关GNU的论述摘录自侯健的《STL源码剖析》
正是由于R源代码开放的特性,当我们简单掌握入门语法后,可以方便的通过查看函数源代码来进行R的进一步学习。
参考书及学习资料:
R官网和RStudio官网都提供了免费的书籍,推荐看Rstudio的,相比R官网里的比较新,链接在此:https://www.rstudio.com/resources/books/
基本语法和基础操作的学习,我不推荐看Rstudio提供的书籍,而是参考R官网中Document
下的manual
,如果觉得英语阅读实在有难度,建议在菜鸟教程或其他网站找到简单的中文教程。
这里还推荐一本书(但书中只有一小部分是入门级别的):《R语言实战》(中译本)可以在 鸠摩搜书 上找到资源。
之前我看过《R for data science》,这本书抛开操作,它更多地是为我们展示了一个统计方法解题过程,作者的观点是具有很强启发性的,至于其余的书我实际上还没看过。
讲了这么多,其实还有一个地方得提一下——有些人可能对计算机不太熟悉,不是很清楚R和Rstudio的关系:R是R语言本身自带的编译器,但这个编译器有许多不足之处,便有人对其进行改造,而RStudio便是改装后的编译器,聪明的你一定想到了不同的改造和扩充不就会产生不同的软件吗?确实是这样的,除了Rstudio之外,我们常见的还有 Tinn-R, R commander,这里只是简单叙述,想深入了解的可以自行搜索。
如果有学过python或Java,相信对于package的概念并不陌生
包是 R 函数、实例数据、预编译代码的集合,包括 R 程序,注释文档、实例、测试数据等。R 语言相关的包一般存储安装目录下对 “library” 目录,默认情况在 R 语言安装完成已经自带来一些常用对包,当然我们也可以在后期自定义添加一些要使用的包。R 语言完整的相关包可以查阅:https://cran.r-project.org/web/packages/available_packages_by_name.html
> .libPaths()
[1] “/Library/Frameworks/R.framework/Versions/4.0/Resources/library”
我们可以使用以下函数来查看编译环境已载入的包:
> search()
[1] “.GlobalEnv” “package:stats” “package:graphics”
[4] “package:grDevices” “package:utils” “package:datasets”
[7] “package:methods” “Autoloads” “package:base”
但在Rstudio下没必要这么麻烦,直接在package下查看就行了,也可以通过简单打勾、取消打勾加载包
这里的简单逻辑是这样的你要调用一个包,首先你得有这个包,没有的话就得下载( install.package( ) ),下载完这个包后并不意味着我们可以直接使用它,而是先要加载这个包( library( ) ),这样子做是合理的,要是每个包在未使用前都加载完毕,一是对性能有影响,二是很容易造成方法重名等问题(因为会多很多个重载函数)。
注:①判断有没有这个包,可以直接用library()更容易,如果没有这个包它会提醒你,并询问你是否安装,R自带的编译器就没有这个功能。
② 本来是想放在查询里面的,这里提前说,如何查看一个包的信息
假如我们要查看TSA
的里面有什么数据集及相关信息,
>library(help = "TSA")
对于R的学习——我觉得一个很重要的能力——有效读取帮助信息,也是很重要的。
在R语言中,我们可以从存储在R语言环境外的文件中读取数据。 我们还可以将数据写入将被操作系统存储和访问的文件。 R语言可以读取和写入各种文件格式,如csv
,excel
,xml
等。以csv
文件为例:
第一步并不是直接将数据读入,能将数据顺利读入的前提是数据在Rstudio的搜索路径上,Rstudio提供的File功能可以让我们很容易的调出数据,因此,假如我们的数据并没有在搜索路径上,我们可以把数据文件加进File下的某个文件,或者添加File的搜索路径,通过 New Folder。
我们也可以利用函数进行同样操作
获取和设置工作目录:使用getwd()函数检查R语言工作区指向的目录。 您还可以使用setwd()函数设置新的工作目录。
# Get and print current working directory.
print(getwd())
# Set current working directory.
setwd("/web/com")
# Get and print current working directory.
print(getwd())
第二步才是读取数据,自定义一个变量去存放
# 读取CSV文件
# 以下是read.csv()函数的一个简单示例,用于读取当前工作目录中可用的 CSV 文件 -
data <- read.csv("input.csv")
print(data)
关于数据类型,其实有一个细节需要注意一下,变量并不会声明为某种数据类型。变量分配有 R 对象,R 对象的数据类型变为变量的数据类型。按性质来分,基本数据类型由数字、逻辑、文本构成;按存储来分,我们的基本数据类型有矢量(vector),列表(list),矩阵(matrix),数组(array),因子(factor),数据帧(data frames)。但实际上,我个人觉得这些东西也没必要去硬记。一方面,开头就搞这些很理论的东西会大大挫伤学习兴趣,即使是隐式的。另一方面,一个变量其R对象是什么数据类型无非意味着它具有这个数据结构下所封装的方法(函数等)。我们需要意识的是,一数据类型的种类实际上是多到你不可能都十分了解的,二数据类型之间的相互转换为数据类型多样性提供了一种可行的解决方案,假使,一个我们不熟悉的数据类型可以转换成我们熟悉的基本数据类型,如果是vector那是最好了,我们可以迅速对这个不熟悉的数据类型进行相应操作。
常见的数据类型转换有as.vector()
,这里不展开具体论述,但给出一个例子:
> library("TSA")
> data(tempdub)
> month=season(tempdub)
> model=lm(tempdub~month)
> plot(y=rstudent(model),x=as.vector(time(tempdub)),type='o')
具体的细节不讲,我们把目光转到x=as.vector(time(tempdub))
,实际上,time(tempdub)的类型是 “ts”(不是基本数据类型,是时间序列特有的一种类型),但是 plot() 本身没有参数为 “ts” 的重载函数,因此,我们需要借助as.vector(),将其转换为矢量类型,以保证 plot() 函数的顺利执行。
授人以鱼不如授人以渔,学会自己查询我觉得是很重要的。而Rstudio相对于R在帮助文件上,会有很大的提升,快捷键cirl+3
可以让我们迅速地切换到帮助窗口,这里顺便介绍一个利用快捷键提高工作效率的方法——利用快捷键灵活实现界面切换和界面的放大缩小。不要看这个改进微不足道,实际上是很好用的。利用cirl+number(1,2,3,4,5,6,7,8,9)
实现界面的切换,一般常用的是2,3,6。利用cirl+shift+number(1,2,3,4,5,6,7,8,9)
实现界面的缩放,请读者自行尝试。
R markdown:一个非常实用的文章编辑工具,将你的数据分析过程用文档的形式呈现出来,文章内部的代码块,可以选择性的显示或隐藏。代码块运行所得到的图像,表格可以呈现在文章内部。R Markdown支持几十种静态和动态输出格式,包括 HTML、PDF、MS Word、Beamer、HTML5幻灯片、簇绒式讲义、书籍、仪表板、闪亮的应用程序、科学文章、网站等。我们常用的是输出为pdf或html文档。
(以下是我上学期的课设,使用R markdown并输出为html文档)
(内部的标题用层级,蓝字部分是超链接)
(这里展示了表格和代码块)
哦,实际上,借助一些现成的模板(比如。包 prettydoc),可以生成非常好看的输出文件,或者如果熟悉前端三板斧的话,也可以自己动手做一个自己的模板,不过,会很麻烦,我一般建议是改别人写好的,毕竟,别人写的代码确实好。以下是我在包 prettydoc 提供的模板基础上,增加了动态小球碰撞效果(在head部分添加一个写好的js文件),是的,后面那些小球是会动的
R notebook:实际上我不怎么用,讲真,我觉得有点多余,可以直接用 R markdown 写
Shiny web App:交互性很强,但我还没用过,不敢妄论,以后补齐。
必须说写下这篇文章,我查阅了不少资料,也从中学得一些东西。Rstudio官网提供的书籍实际上是很好用的,但也正是这个原因,要完全读懂这些书需要花费一定的时间与不停的自我尝试,写在这里也希望能勉励自己后续进行学习吧。这个系列我还会写下去,但更新速度势必是很慢的,因为各种原因。共勉。