[ 分享 ] 骚年们,我们一起来学习一下 r 语言

为什么学习 R 语言呢

有目标才会有动力。

作为一个新世纪的大学生,应该都掌握一些统计的常识和处理数据的技能。我以
为这个是非常起码的。在这个满是(虚假的)信息的世界里,没有办法做一些简
单的数据处理从而获得知识其实就像旧社会不识字不能阅读的人一样(虽然现在
大学生的阅读能力也让人堪忧)。

那处理数据为什么要选择 R 语言呢? Excel 不行么?当然可以,如果你可以把
Excel 玩的很溜。但是也有很多的理由你要选择 R 语言。R 语言是跨平台且免费
的,具有非常强大功能。也许你会说我不要那么强大的功能, Excel 足够了,确
实,很多时候 Excel 可以非常好的完成我们的工作。但是根据我的经验,R 语言
在处理一些简单问题的时候也非常灵活好用,他可以导入多种数据,保存为脚本
以后可以重复使用。比如我们老师让我们计算土地沉降量并给个曲线图。如果用
Excel 我每次计算都不得一个一个更新数据然后还要点 N 下鼠标,而使用 R 语言,
我只要把 CSV 的数据更新(复制粘贴)。然后运行以下之前写好的脚本就可以
了。而当你要处理一些复杂的问题的时候,由于你已经掌握了 R 语言基本的方
法,所以也可以很容易的进阶。

R 语言还是这几年教育界发展最快的语言。很多的学校开始意识到有必要教授学
生一些 R 语言的知识。如果你还不会,那么现在就可以给自己补上一课了:)

那要怎么学习呢

学习 R 语言的这一段时间说实话我也非常迷惑。他的语法和一般语言比其实有一
些奇怪,比如他不用等号而用「->」。R 语言有 4000 多个包,很多包由不同的作
者写成,结果就是很多参数形式有时候会不太统一,有时候会造成记忆上的失误。

学习方法还是那句话,熟能生巧。要不断的使用,在使用中学习,不知道的东
西就查阅文档,用 google。

但是这样说又太笼统。我们还是说的稍微具体一点点。

(1)要给自己动力
告诉自己 R 语言是多么的有用,打开 R 语言,运行
demo(image)
, 运行

demo(graphics)

,看一下 R 语言的演示,然后给自己洗脑。对自己说「R 语言
的出图是多么漂亮」,「R 语言处理数据的代码是多么的简洁」。。。。有动力
才可以坚持。
(2)要了解 R 语言的工作流程
R 语言包非常多,非常复杂,所以有一个工作的流程概要是非常有必要的。知道了大概
流程,就算到了那里不知道怎么做了也知道怎么去找资料。
(3)了解统计常识,了解 R 语言的基本概念(数据结构)
统计知识就不说了,总要知道方差是什么吧。关于 R 语言的基本概念
我觉得主要还是数据结构,数据结构不是一下子就可以了解的。需要理论 + 实践。
使用几次以后你就会发现 R 中几乎所有的数据结构都是用向量组成的。而分析数据
往往就是要分解出向量。很多东西是有内在的逻辑性的。
(4)使用他
了解了概念和工作流程以后要不断的使用。在使用中不断加深概念的理解。
(5)学会查阅文档
R 语言有非常好的文档。要学会利用。R 语言自身的复
杂性让很多问题不可能一下子讲的很清楚,所以必须查阅文档。事实上也没有
一个人会掌握 R 语言的全部吧。比如用 R 语言来做生物分析的人和作经济分析的人估计会
对 R 语言有完全不同的理解。

终于扯完了,来正式的教程

安装 R 语言

首先是安装 R 语言。这个在 openSUSE 下是这样的。

sudo zypper in R-base R-base-devel

好了,没了。我大 openSUSE 就是这样的方便:)

了解 R 的工作流程

其实很简单,就是数据采集、导入 -> 数据的整理 -> 出图,出分析结果。

第一步是采集数据,我们需要有数据才可以分析。R 自身就
提供一些数据集给新手演示用,但是不推荐使用,因为根据我的经验,其实使用
前的数据收集导入才是 R 语言最麻烦的部分。很多人都卡在这一步,可能学完了
R 语言没有接触过真实的数据。即使是很简单的数据(比如等下我们要用的),是自己
找来的并处理过的,总是会有更好的影响。

然后整理数据,计算出一些你需要的的数据,去除一些无用的数据,还要就是把数据格式
转化成 R 语言可以很好处理的类型。

最后要出图,出分析结果。其实整个过程没有那么直来直去,中途还要不断的反复。

采集数据

为了避免纸上谈兵,我
们就来一点实际的例子。

首先我们要找一些可以给我们分析的数据集。我们直接去 国家统计局的官网 ](http://data.stats.gov.cn/index)
下载(需注册)。

你可以选择自己喜欢的内容。这里就在统计热词里找一个人口。戳 这里 ](http://data.stats.gov.cn/workspace/index?m=hgnd)

话说国家统计局这点还是不错的,提供数据的下载、图表还有基本的处理工具。
比如你可以先把数据转置,然后下载,这样处理起来会非常方便。虽然 R 语言
自己可以转置数据。

我们选择以 CSV 的格式下载,这个就是纯文本。可是却是用 GB18030 编码的。
我们还要先把他转成 UTF-8。你可以用 KWrite 打开另存为成 UTF-8 编码
就好了。其他编辑器应该也差不多。

最后还要把文件头尾的一些注释去掉。使他可以变成可以被 R 理解的 CSV
格式。

R 语言需要一个目录用来储存工作过程。你创建的一些变量都会储存在这个目录
下,你的一些数据、输出的图形也会储存在这个目录下。所以我们先创建一个工
作目录。然后把我们的 csv 文件命名为比如 data.csv 丢到这个目录下,然后
进入这个目录后运行 R 语言。

好了,现在我们已经做好了数据采集的工作。

R 语言的数据类型

在我们进一步实践之前我们先来简单了解一下数据类型。什么是数据结构?就是我们要把数
据以 R 语言可以理解的组织方式输入到 R 语言当中。R 中有非常多的数据结构。
比如向量、矩阵、数组、数据框、因子、列表。其中最为核心的是向量,最为常
用的是数据框。

为什么说向量是最核心的?因为其他数据结构基本都是由向量组成的。比如矩阵
就是几个相同数据类型的向量组成的(这和线性代数的矩阵其实是一样一样的)。
数据框则是不同数据类型的向量组成。

当我们要处理其他数据结构的时候往往也是提取出一个向量来处理。

而数据框,说白了和数据库中的表是一样一样的。就是由行列组成的表格。你也可以简单
的理解成就是我们日常处理的表格。

数据导入

R 语言可以导入各种不同的数据。说实话要把这些方法都记住确实不太容易。但
是一般你会使用到的其实就是那么几种。假如你经常要使用 MySQL 的数据,R
可以直接读取 MySQL 中的数据。R 语言导入 Excel、XML、SPSS、SAS、Stata 等
多种数据,也可以直接从网页抓取表格数据。

当然最原始的是通过键盘输入数据。比如

data <- c(1,2,3,4,5,6,7)

就创建了一个向量,由七个数组组成。你可以编辑这些数据通过非常直观的图
形界面。

data <- edit(data)

我们这里就导入一个 CSV 数据。数据之前已经准备好了。如果你之前偷懒没有
准备的话。。。我就在这里给你提供一份。。。。
data.csv (2.57 KB)
好了下面导入。其实非常简单。

data <- read.table("data.csv",header=TRUE,sep=",")

很容易理解我们从 data.csv 导入一个数据,这些数据的行首表示的是各行的名
称。

你在 R 语言中输入 data 就可以看到你导入的数据是什么样的了。

你也可以用
summary(data)
来浏览一下数据的概况。

在这里 data 被保存为一个数据框。我们可以通过两种方式提取出其中的一列数
据:

data$ 时间 

或者

data[1]]

注意 data[1] 和 data[1]] 的区别,大家比较一下他们的输出就可以了解
了。这里主要就是阐述一下 R 语言的工作流程,细节大家可以自行 google。

数据整理

导入数据以后我们还要对数据进行整理,比如删掉一些有空缺的数据,转换一些
数据的格式(比如把第一列的因子转化成时间)。重新生成一些数据储存,比如
我们可以把相邻两年间的人口总数相减得到每年的人口增加量。组成一个新的向
量。再添加进数据框中。

比如 data 中的第一列时间最好可以把他处理成时间类型,不过我觉得在这里用因子
也可以:)

比较多的处理无外乎把字符转化成因子。具体的大家可以自己 google。

出图,出分析结果

下面我们要分析一点什么。比如我们可以这样。

plot(data[2]],data[3]]+data[4]])

plot 是绘图函数(其实是一个方法不是函数),他有很多参数比如坐标名称,刻
度,标题。最简单的你可以输入两个向量,他就会画出他们之间的关系的图像。

数据的第二列是总人口,第三列是男性人口,第四列是女性人口,所以。。。。
这个图像出来应该是一个斜率为 1 的直线。。。。

如果你对其有所怀疑,可以计算他们的斜率

data[2]]/(data[3]]+data[4]])

或者回归一条曲线

lm(data[2]]~(data[3]]+data[4]]))

如果查看这条曲线拟合的程度好不好。我们还希望保存结果。比如保存到
data.pdf 文档中我们可以这样。

pdf("data.pdf")
med <- (data[3]]+data[4]])
fit <- lm(data[2]]~med)
plot(data[2]],(data[3]]+data[4]]))
abline(fit)
dev.off()

结果很漂亮,这个结果表明我国人民不是男的就是女的。。。。。

进一步的,如果我们出来的结果没有那么漂亮,那么我们可能要检查我们的数据
有没有问题。如果没有正我们还要修正我们的模型,比如用二元来拟合。

在 R 语言中查询文档

有时候我们不得不查阅一些文档,因为 R 的包和函数(其实是方法)实在太多了。不能够记住,
至少要的时候要找得到。 google 是一种方法。R 自带的一些文档也是非常有用
的。比如

help.start()
help("foo")
example("foo")

R 语言可以通过 example 来演示一些例子,非常形象生动。

使用 R 的额外包

当你越来越熟悉 R 语言以后你会发现很多时候要依赖一些包来提供额外的功能。
R 有自己的包管理,默认用户运行的话会安装在主目录下一个叫 R 的文件夹里。

举个例子,我们运行

install.packages("gclus")

来安装 gclus,他会先列出一个镜像名单。这里我们选择比较近的一个镜像,比如
China(Bejing 1)。然后他就会开始下载。

你可以通过
library(“gclus”)
载入一个包,开始使用一个包的时候你可以通过

help(package="gclus")

来了解一个包的详细情况。

这里再来举一个安装使用包,查看包帮助和演示的例子:

install.packages("vcd")
help(package="vcd")
library(vcd)
help(Arthritis)
Arthritis
example(Arthritis)

补充:

给学生的建议

我非常后悔在学习概率论统计的时候没有同步学习 R 语言。数学课上理论的知识有时
侯其实不容易很好的理解,要是配合着一些工具来演练一下会非常有助于掌握一些基本
的知识。比如老师讲 OLS 回归,如果用 R 语言来运行几个例子,一定会有非常好的
学习效果,另一方面,其实现在学 R 语言有些统计的概念已经不是很熟悉了,不得不
重新复习。

所以非常建议学生朋友如果正在学习统计概率论,可以同步的学习一下 R 语言。

选择一个合适的工具

你可以在终端运行 R。使用交互的方式来工作,但是这样多少有点不爽,而且一
些步骤修改起来非常麻烦,结果也无法复用。这里推荐两种 R 语言的图形界面。

(1)RStudio openSUSE 用户到这里 一键安装 ](http://software.opensuse.org/ymp/devel:languages:R:base/openSUSE_13.1/rstudio.ymp?base=openSUSE%3A13.1&query=rstudio)
口碑非常好,可以和各种其他工具集成,可是我没怎么用过。。。
(2)Emacs + ESS
这个也是用的非常多一个 R 语言的图形用户界面。我就是使用 Emacs + ESS 来
使用 R 语言的,介于很多人不熟悉 Emacs 且 Emacs 学习成本很高,还是首推
RStudio。

Emacs 用户可以直接通过 elpa 安装 ESS 插件。然后在 Emacs 配置文件中加入:

(require 'ess-site)
(setq-default inferior-R-program-name
              "/usr/bin/R")

其他的一些工具比如带 StatET 插件的 Eclipse 也是可以的,但是貌似用的人
比较少。如果你熟悉 Eclipse 也不错。

参考书籍

我看过 《R 语言实战》、《R 语言经典实例》,感觉可以先看《R 语言实战》再看《 R 语言经典实例》。网络上流传的一些免费的入门书籍也非常不错:)

2赞

输出的 pdf 中文乱码怎么破

Mark

Tapatalk

plot 添加参数 family=“GB1”

比如
plot(1:10,main=" 中文",family=“GB1”)

效果是一般,但是比较通用。追求效果,可以尝试一下 Cairo 这个包,据说不错,我没有试过。

恩,美国的统计课现在好像有很多是和 R 语言一起教的,至少介绍里这么说。 我没上过统计,不太清楚。

不过我现在也不打算学。 绝大部分实验研究,都必须用到统计学,但是大部分人都是在滥用,所以我也不太关心了。我主要做理论,理论讲究概率而不是统计。

比较早的时候,我去了解过 R 语言,不过一看到不是通用编程语言,瞬间就掐熄了学习的欲望。

正是因为统计被滥用才要学习统计。

太绝对了。

不是通用的编程语言意味着。。。。可能会相对好学一点。。。。

有点道理。 确实滥用太多了,更需要学习。

我想主要是大家都觉得实验后面没个统计分析就发不出去,所以大家都来几个 t- 测验或者费雪测验吧。

理论里面主要还是用一些概率,随机算法用。 但是理论 CS 不做实验,不知道哪里要用到统计。 概率是很有用的。但是(连续)概率论要学数分才能学。当然与之对立的还有离散概率论,这个在离散数学里一般就有了。

我觉得,用不到不是不用学习原因。篮球运动员也会去踢足球,为了练习视野。况且概率和统计本来就关系密切,但这个问题扯远了就变成玄谈了。R 是一个好用的工具,我觉得不限于学术研究人员。工具的价值体现在你去使用它。

R 语言有一些概率模拟的函数,貌似可以处理一些概率模拟的问题。但是我不是很了解。主要是我不是很了解概率论的一些东西。R 语言本身的定位也不是局限于统计(至少可以运算矩阵我知道,很多人还很推崇 R 运算矩阵的方式),而是他在这方面表现太强大了。

恩。有很多东西不直接用到,但是其思维的学习是很有好处的。

是的。核心思想相通

所以说我感觉有很多(至少我在美国上的)基础课太功力太应试了。

不应该把注意力放在运算和应用上,而应该更多地学习和训练各种学科的根本思路。

应该推广 R 语言,在统计学上比 matlab 更加健壮。

matlab 在 ML 这块用得很多。 stats 应该还是 R 多。

我想我会尝试去学习一下的,因为我觉得 R 在系统研究方面会有很大用处,尤其是处理模糊问题的时候。