3月 092013
 

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

连载中,待续

  28 Responses to “R 菜鸟入门篇 第01篇 超级计算器”

  1. 写的详细又有趣,学习了!

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

  3. 表示Rstudio下载打不开了。

  4. 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的时候没有这种情况? 求解

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

  6. 博主真是有心,谢谢你了~

  7. 写的不错,第一印象,非常像Matlab。界面感觉也很爽。

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

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

      1. which(x==max(x))
      2. “只能看到第7个”是什么意思?我这里都能看到啊。
      • 谢谢,估计是我的浏览器的问题,今天就能看到全部评论和回复了。再次表示感谢!

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

    非常感谢!

  11. 入门中的入门,谢谢大鹏!

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

  13. 17年的我,看了博客,依然觉得写得很棒,哈哈

  14. Windows 系统为例作介绍。目前 R 的最新版 2.15.3 安装程序只有 47 M,比起几个G的 Matlab 要苗条多了

  15. 支持多种语言,包括C++和Java等几十种编程语言,当然也包括我的最爱:R。使用的时候,只需将代码敲入输入窗口

 填写评论

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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(必填)

(必填)