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 菜鸟们,请早高峰时注意健康

连载中,待续

R 菜鸟入门篇 第01篇 超级计算器》上有26条评论

  1. 我是小熊

    wow!博主写的真是太棒了 (+86)xxxxxxxxxxx XX 有空到北京来一定要请博主吃饭~

    回复
    1. 我是小熊

      当然 还是先来一罐¥2.5的燕京吧 cheers! 再次感谢博主 非常感谢~

      回复
  2. 马桥

    very thanks为啥我用Rstudio 想a b x这些向量不能定义? a固定为 1.0 1.5 2.0 3.0 5.0 7.8 b为 14 15 16 17 18 19 20而单独用R的时候没有这种情况? 求解

    回复
  3. crisp

    “计算 PM2.5 早高峰(6时到10时)时段占全天的比例。”这个是什么意思呢?没弄明白…能解释下怎么做的么?谢谢!

    回复
  4. Didi

    刚刚开始学习,这帖子真是太好了,太贴心了,真的人人都能R啊。
    请教dapeng一个问题,最后一个练习中,最大值出现在几点怎么做?

    回复
  5. Didi

    谢谢对昨天问题的回复,用which.max可以找到最大值所在位置,不过它只返回第一个最大值出现的位置,如果要把所有最大值的位置都找出来,请问应该用什么命令?
    另外报告一个小问题,帖子下面的评论只能看到第7个,之后的都没有显示,也看不到我昨天发的帖子,有办法显示所有评论吗?

    回复
    1. 大鹏 文章作者
      1. which(x==max(x))
      2. “只能看到第7个”是什么意思?我这里都能看到啊。
      回复
      1. Didi

        谢谢,估计是我的浏览器的问题,今天就能看到全部评论和回复了。再次表示感谢!

        回复
        1. 大鹏 文章作者

          不客气。我应该感谢你给我的热心反馈。

  6. 我是小熊

    博主 不好意思能把我前面的留言删掉吗 似乎有点泄露个人信息……

    非常感谢!

    回复
  7. dashan

    17年的我看到13年的博主,有一种穿越时空的感激之情哈哈哈哈~好赞!

    回复
    1. 大鹏 文章作者

      这就是博客的好处:写了放在那儿,一直搜得到。

      回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax