R是一门著名的可用于数据和统计分析的程序语言,本文翻译自R软件官方文档教程《An Introduction to R》,仅供学习和参考。
1 预备与简介
1.1 R环境
R是一系列专业的数据操作、计算、可视化程序的集合体。
它具有以下优点:
- 高效的数据处理及数据储存能力
- 拥有大量数组操作程序,尤其和矩阵相关
- 包含一系列成套的大型数据分析及可视化工具
- 自带一门优秀的编程语言以进行功能定制与拓展——S语言。它支持基本的条件语句、循环语句、自定义函数等。
本节之所以称为R"环境",就是想体现 R 是一个设计优良,上下统一的系统,而不仅仅只是像某些数据分析软件一样的功能堆积。
R 是新兴交互式数据分析的一种强有力的工具或媒介。它发展迅速,现如今已经拥有数不尽数的拓展包。用 R 编写的程序通常很短,主要负责完成数据分析中的一小部分任务。
1.2 相关软件及文档
R 可以被当成S语言的一种实现,同时也可以看成是 S-PLUS 系统的基础。
S语言诞生自贝尔实验室,它的创造者为Rick Becker, John Chambers 和 Allan Wilks 。
S语言的演化在John Chambers等编写的四本相关书籍中有所展露。
而对于R语言来说,Richard A. Becker, John M. Chambers 以及 Allan R. Wilks三人所著的《The New S Language: A Programming Environment for Data Analysis and Graphics》就是最为经典的参考资料。
John M. Chambers 和 Trevor J. Hastie所编辑的《Statistical Models in S》详述了1991版S语言的新特性。
methods
包中的类和方法的编写基于John M. Chambers的《Programming with Data》一书。
现在,市面上有很多关于使用R来进行数据统计和分析的书籍。除此之外,关于S或SPLUS的书籍和文档也能为你提供参考,不过你要注意R和它们在某些细节上可能实现不同。
1.3 R与统计
R 和 统计有着一种说不清道不明的关系。很多人都使用R来进行统计分析。R和统计分析确实关系密切,但R并不仅仅只可以用于统计分析,不如这样说:R 拥有一系列经典的或现代的统计分析工具。这些工具并不是R环境内置的,而是由R的社区及用户编写实现的,通常以package
(拓展包)的方式进行导入。
R 环境内置25个standard package
/recommended package
(基础包/标准包/推荐包)。
其他丰富的拓展包可以在官网(https://CRAN.R-project.org)或其他地方进行下载。
大量经典统计分析工具或者最新的统计分析方法在拓展包中得以实现,不过你可能要花不少功夫去了解、定位并下载它们。
S语言(R当然也是)和其他常见的统计分析软件(SAS,SPSS等)有着很大的不同。S语言通过一系列连续的指令来完成数据分析,分析结果通常保存在一个个object
(对象)中。其他软件只需要一个或少数命令或操作,就会显示出一系列分析结果。而R只会逐步给出小结果输出,大量的信息保存在object
中,以供进一步的分析和处理。
1.4 R和窗口
使用R最方便的方式当然是在由窗口组成的图形化界面之中进行操作。因此,我们假定读者拥有图形化操作系统。当然,本教程的大部分内容在R的任何运行环境中都适用。
很多读者会不由自主关心操作系统的影响。本教程基于Unix系统。如果你的操作系统是Windows或Mac,你可能要作出相应的小小调整。这谈起来很无聊。请寻求外部援助,自行解决哦。
1.5 R的交互式使用
当你运行R,你会看到一个命令行窗口,它等待着你去输入命令。
默认的提示符是">",就像这样:
$R #输入命令或通过点击图标进入R
R version 4.2.3 (2023-03-15 ucrt) -- "Shortstop Beagle"
Copyright (C) 2023 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.
>
就像R提示的那样,你可以通过q()
退出R。
1.6 获取有关函数或特性的帮助
R 内置着一套帮助系统。为了获取关于某一特定函数的功能介绍,如solve
函数,你可以输入以下命令之一:
help(solve)
?solve
这里的solve
可以换成任意的函数名。
对于某些特性,也就是那些被R赋予了特殊含义的符号或关键字,如if
、for
、function
、+
等,你要加上双引号""
才能正确获取到帮助。
help("if")
?"if"
help("function")
?"+"
双引号在别的情况下也能起到特殊标记的作用,如要使用字符串It’s important,就可以用"It's important"
来界定边界,防止'
被解释为特殊字符。
在大多数R的安装系统上,可以通过
help.start()
来启动基于HTML网页的帮助文档。这份帮助文档权威而有效,是你学习和使用R语言的必备资料。
使用以下命令可以对帮助文档进行搜索,以获取某一主题下的所有相关帮助,如math主题:
help.search(math)
??math
你还可以查看某一函数或特性相关的代码示例:
example(solve)
1.7 R命令、大小写敏感······
R语言的语法其实很简单。
R和其他很多语言一样,是大小写敏感的。也就是说,A
和a
是不一样的标识符。
R语言的标识符取值范围在不同国家和地区有所不同,但一般来说,26个字母和10个数字以及.
和_
是被允许的。
标识符命名有两个限制:
- 必须以
.
或字母开头 - 如果以
.
开头,第二个字符就不能是数字
在R语言中,标识符没有长度限制。
在R语言中,基本的语句要么是表达式,要么是赋值式。如果是表达式,那么它就会被计算,并且自动打印输出结果(除非加以特殊限制)。赋值式也会计算出一个结果,但这个结果会保存在变量中,而且一般不会自动打印输出。
单条R语言命令以;
或者换行进行结束。
可以使用{
}
来将基本语句进行结合,形成代码块。
注释几乎可以写在任何地方。它以#
开头,直到这一行末。
如果在命令行中,一条语句没有书写完就换行,默认会出现+
提示符(可修改):
> 1+
+ 1
[1] 2
1.8 历史命令
你可以通过键盘上的↑
和↓
在历史命令中切换。
1.9 输出结果的导出
如果你的命令保存在一个外部文件,比如说当前目录下的"demo.R"之中,你可以通过source
函数来加载这些命令。
source("demo.R")
这里的文件名可以换成相应的路径。
如果你将输出的数据保存到一个单独的文件中,你可以使用sink
函数。
sink("record.txt")
这样,当前的所有输出数据就会保存到"record.txt"。通过sink
函数,你也可以恢复到默认的命令行输出。
sink()
1.10 数据的持久性以及删除对象
R 创建的数据都以object
(对象)的形式呈现。也就是说,无论是变量、数组、字符串、函数,还是由这些部件组成的整体,都是一种对象。
在R程序进程中,对象由其名称来进行创建和标识。
objects()
或ls()
函数能够打印出当前程序所有由用户创建的对象的名称。
> x<-1;
> y<-"1";
> z<-c(1,2,3);
> ls()
[1] "x" "y" "z"
> objects()
[1] "x" "y" "z"
这些对象组成了workspace
,即我们现在的工作空间。
如果你想删除对象,只需要在rm()
函数的参数列表中指明想要删除的对象的名称即可。
> rm(x,y,z)
> ls()
character(0)
R程序进程的所有命令和数据都可以进行永久保存。每次当你退出R程序的时候,你都需要确认是否保存现在的工作映像。如果你选择是,当前你所创建的所有对象将保存在.RData
文件中,所有命令都将保存在.Rhistory
文件中。当你下次再打开R时,这些对象和命令将可以恢复如初。
R程序开始运行时,会扫描当前的工作文件夹,找到.RData
文件以及.Rhistory
文件并加载。
基于以上所述,你应该将不同的任务创建在不同的文件夹中,以免数据错乱。