R 菜鸟入门篇 第01篇 超级计算器

R 菜鸟入门三大秘诀:

  • 第一秘诀: 不要害怕 !学 R 非难事,Anyone can R (谁都可以贰).
  • 第二秘诀: 能用就行 !只要能完成工作就行,R 代码写得漂亮与否并不重要。一个问题如果你有两个解决办法,那就选用你曾用过的那个。时间有富余的话再试另一个。
  • 第三秘诀: 与人分享 !跟同学或同事分享 R 代码。这就是为啥 dapeng 写这个系列的帖子。

初见 R,可以用在线版品尝一下,点这里,用法在这里不做介绍了,因为 dapeng 还是建议菜鸟从下载安装开始。点击这里下载 R 程序。R 是跨平台的,一般来说,Linux 用户自己善于折腾,不必 dapeng 在这里唧唧歪歪了,因此晴耕雨讀志以 Windows 系统为例作介绍。目前 R 的最新版 2.15.3 安装程序只有 47 M,比起几个G的 Matlab 要苗条多了。下载完毕后安装,一路下一步的傻瓜式安装即可。安装完毕之后就可以用了。

不过,初见的 R 在裸奔,界面丑陋, dapeng 建议给 R 穿上一件衣服,奔时看上去体面一些。能穿的免费衣服很多,人们各有所爱。dapeng 用过 Tinn-R、 RKward、 Vim+插件之后,最后选定了 Rstudio (点这里下载,免费正版哦)。选用 Rstudio 有诸多好处,最明显的就是把 R 常用的界面整合到了一起。 看吧,华丽丽的就像 Matlab ,默认四个子窗口:左上窗输入代码,左下窗看结果,右上窗显示变量值,右下窗显示作图和帮助:


图01.1. Rstudio 工作窗口。图片来自 Rstudio 官网,中文解释是 dapeng 加的。

Rstudio 还有很多好处,比如本文就是用 Rstudio 的 markdown 下写成的。下文均以 Rstudio 来示范 R 的使用。下载安装 Rstudio ,运行,然后选择菜单 File – New – R script ,或按快捷键 ctrl+shift+n,会新建一个 R 文件。好的,现在正式开始 R 之旅。

R 最简单的功能,是用作计算器。先在左上窗口输入以下代码,然后按窗口上方的运行(Run)按钮,或按快捷键 ctrl+回车,就会运行光标所在行的整行代码:

3 * (2 + 2)
## [1] 12

上面第一行是输入的代码示例,第二行用两个 # 号开头的是 Rstudio 左下窗显示的运行结果。如不另作说明,下文都用这种格式来区分代码和运行结果(谢谢谢益辉的 knitr!)。先不用管 # 号后面的 1 是什么。 R 的数学基本运算符有 加 +, 减 -,乘 *,除 /,乘方 ^,整除的商 %/%,整除的余数 %%

练习 01.1:计算365除以7得到的整除商和余数。

下面,我们开个平方。输入并运行

sqrt(9)  # 开平方
## [1] 3

这里,sqrt 是开平方的函数,被开方的数必须放在圆括号里,这是 R 语法的基本规则之一。# 号后面一直到这一行的末尾是注释,注释部分不会被运行,这样是为了方便理解这句代码的用途。为了节省篇幅,下文尽量在代码中用注释的方式来说明。

有人读到这里可能会被吓住了:sqrt,开玩笑,我怎么记得住啊!注意 R 入门第一秘诀: 不要被 R 吓住! 试试只输入 s,然后按 tab 键,就会出现贴心的提示,所有以 s 打头的函数都列在里边了,用鼠标或箭头键选取就行了。在 s 后面再接着输入 q 试试。

其实,常用的函数就那么几个,用几次就不需要贴心提示了。而且函数名称都很好记,sqrt 就是 squre root 的缩写,你不是恰好想练英文吗。实在记不住,那就用基本运算符来求乘方好了, 9 ^ 0.5 即可。将来你甚至可以把 sqrt 改名叫做 kaipingfang。条条道路通罗马, R 很灵活的。

常用函数都可以顾名思义:四舍五入 round(), 截取整数 trunc(), 开平方 sqrt(),求绝对值 abs(),指数函数 exp(),自然对数函数 log(),以 10 为底的对数函数 log10(),三角函数 sin() cos() tan() asin() acos() atan()

练习 01.2:大牛 Knuth 有个趣闻:他创建的 TEX 版本号趋近于圆周率 pi,他创建的 Metafont 版本号趋近于自然对数的底 e。pi 和 e 的值是多少?

Rpi 的值已经定义好了,只要输入并运行

pi
## [1] 3.142

怎么只有这几位?精确度不够高啊。要提高精确度,需要

options(digits = 22)  # 最大支持 22 位
pi
## [1] 3.141592653589793115998
exp(1)  # 计算 e
## [1] 2.718281828459045090796
e <- exp(1)  # 把 exp(1) 的值保存到一个变量 e 里,方便以后调用:

其中,<- 是个箭头,表示把右边的值赋给左边,Rtudio 中输入箭头的快捷键是 alt + _ 。也可以用等号 =。箭头的灵活之处在于,还可以把左边的值赋给右边:

exp(1) -> e

好了,以后可以用e来代表自然对数的底了。查看 e 的值,可以看 Rstudio 的右上窗,也可以在代码窗口输入变量名 e,然后 ctrl + 回车,

e
## [1] 2.718281828459045090796

就会在结果窗口出现 e 的值。e 可以用来做后续计算,比如:

round(e)^2
## [1] 9

注意, R 中大小写字母是有区别的,Ee 是不同的两个变量名。这叫做“大小写敏感”。

变量名的约定:

变量可以

  • 是一个或多个字母,如 e, x, mydata
  • 也可以包括数字,如 a1, a2;
  • 可以包括句点和下划线,如 temperature_air, humidity.max

但是,

  • 不可以包含空格,如不能是 my data
  • 不可以用数字或小数开头,如不能是 2x,也不能是.3y
  • 不可以是R的内置变量。这个不必担心,遇见的时候 R 自动发警告。

菜鸟只要注意 变量名不要加空格 ,就不会犯大错。

一个变量名可以存储很多数据。比如说,拜罗伊特月降水量从一月到十二月依次是:61, 45, 55, 46, 56, 79, 86, 57, 56, 56, 57, 71 mm。可以把这十二个数据赋值给一个变量 x,称为向量:

options(digits = 3)  # 精确位数太多了,还是调回初始值 3 吧。
x <- c(61, 45, 55, 46, 56, 79, 86, 57, 56, 56, 57, 71)  # 拜罗伊特月降水量
x
##  [1] 61 45 55 46 56 79 86 57 56 56 57 71
x[4]  # 四月的降水量。方括号中的 4 表示调用 x 中的第四个数值。
## [1] 46


练习 01.3:2003 年 8 月北京城区测得的 PM2.5 的质量浓度日变化(数据来源:Chan et al., 2005. Atmospheric Environment 39, no. 28 : 5113-5124), 从 0 时到 23 时 依次是97, 80, 64, 91, 87, 100, 128, 144, 150, 150, 150, 106, 78, 68, 62, 46, 55, 68, 84, 92, 95, 108, 128, 138 微克每立方米(十年前就超标了啊!)。计算 PM2.5 早高峰(6时到10时)时段占全天的比例。

R 支持向量运算。试试输入:

x + 100
##  [1] 161 145 155 146 156 179 186 157 156 156 157 171

x 里的每一个数都加上了 100 。这就是向量运算的好处:简单的代码,避免逐个计算。

下面,让我们作出第一个图形来:拜罗伊特降水量的季节变化。敲7个键就行了:

plot(x)  # 作图

plot of chunk unnamed-chunk-9

是不是很简单?是不是很激动?懒人都喜欢简单的。

再进一步,我们来做统计运算,看看拜罗伊特每月降水量的平均值是多少。

(x[1] + x[2] + x[3] + x[4] + x[5] + x[6] + x[7] + x[8] + x[9] + x[10] + x[11] + 
    x[12])/12  # 计算平均值
## [1] 60.4
sum(x)/length(x)  # 计算平均值的简化方法。sum() 是求和函数,length() 给出向量长度。
## [1] 60.4
mean(x)  # 进一步简化。平均值函数。
## [1] 60.4

常用统计函数:求和 sum(),平均值 mean(),最大值 max(),最小值 min(),范围 range(),中位数 median(),标准差 sd(),方差 var()

练习 01.4:使用练习 01.3 中所用的数据,做出北京 PM2.5 的日变化图。计算 PM2.5 出现的最大值、最小值、平均值。最大值出现在几点钟?

最后,请在Rstudio菜单栏点击 *File-Save*,或按快捷键 ctrl+s,把刚才输入的代码保存到一个文件里,下一节接着用。

好啦,以上就是 R 的基本操作和运算、作图、统计分析,你已经掌握了! R 就差不多学完啦!喝一杯庆祝一下吧。

有用的信息:

安装和运行 cran, rstudio
数学基本运算符 + - * / ^ %/% %%
常用函数 round() trunc() sqrt() abs() exp() log() log10() sin() asin()
赋值 <- = ->
作图 plot()
常用统计函数 sum() mean() max() min() range() median() sd()var()
其他 R 菜鸟们,请早高峰时注意健康

连载中,待续

原文链接

comments powered by Disqus