【翻译】A (very) short introduction to R R的简短介绍

【前言】html

  本文翻译自Paul Torfs & Claudia Brauer的文章A (very) short introduction to R。其中比较简单的地方没有翻译,很差用中文描述的地方也没有翻译。express

1. 简介和安装编程

  R语言是一种用于数据计算和图标制做的强大的语言。建议初学者使用集成开发环境RStudio。安装R和RStudio的部分就不写了,网上搜一下就能够了。windows

2. RStudio界面数组

       

  左下方是控制台窗口,也叫命令行窗口,能够在>后输入简单的命令,R就会执行你的命令。这个窗口很是重要,由于这是R具体执行的地方。数据结构

  左上方是编辑窗口,也叫脚本窗口。这个部分就是用来编程的,能够写入连续的指令。若是这个窗口没有打开,能够点击File->New->R script打开。若是想运行编辑窗口指令,点击Run,或按下CTRL+ENTER。app

  右上方是工做空间/历史窗口。在工做空间窗口,你能够看到R中存有的各类数据和值,点击就能够查看和更改这些值。历史窗口记录了你以前输入过的指令。编程语言

  右下方是文件/图标/包/帮助窗口。这里能够打开文件,查看图表(包括之前的)、安装和加载包,以及使用帮助功能。ide

3. 工做目录函数

  先设定本身的工做目录,也就是生成文件保存的地方。

  在命令行中创建工做目录的方法:

  >setwd("M:/Hydrology/R/")

  在RStudio里也可经过Tools->Set working directory来设定。

4. 库

  利用packages或libraries能够进行不少数据统计分析。

  安装package:(以geometry为例)点击install packages,输入geometry,或者在命令窗口输入install.packages(“geometry”)。

  加载package:在命令窗口中输入library(“geometry”)。

5. R命令示例

(1)计算

  输入:

  >10^2 + 36

  获得答案:

  [1] 136

  练习:用2016减去你在这所学校开始学习的那一年,再除以2016减去你出生那年的差,再乘以100,能够获得你已经在这所学校度过了生命的百分之几。在须要的时候使用括号。

若是你加了左括号,忘了加右括号,那么>会变成+,若是想要退出运算状态,按Esc。

(2)工做空间

  能够给数字一个命名,它就成为了变量,能够过一会再次使用。例如:

  > a = 4

  R会记住a的值。你能够询问R,a的值是多少。

  > a

  [1] 4

  或者用a进行运算:

  > a * 5

  [1] 20

  若是从新定义a,R就会忘记原来的值,而是记住新的值。

  > a = a + 10

  > a

  [1] 14

  若是要把因此变量从R的存储中移除:

  >rm(list=ls())

  或者点击工做空间窗口的clear all。若是只想移除变量啊,输入rm(a)。

  注意命名必须以字母开头。

(3)标量、向量和矩阵

  标量是一个数,0维;向量是一个一维数组;矩阵是一个二维数组。

  定义一个向量,使用函数c,是concatenate的简写:

  >b = c(3,4,5)

(4)函数

  若是你想算向量b中全部数的平均值,你能够这么写:

  > (3+4+5)/3

  但若是向量特别长的话这么写就太繁琐了,因此可使用函数。你可使用R里有的函数,也能够用你本身写的函数。

  > mean(x=b)

  括号里是参数,给函数提供额外信息。x表示平均函数须要操做的向量是b。也能够省略x,写成mean(b)。

  练习:先将4,5,8,11编到一个向量中,而后用sum函数计算其和。

  再举一个例子:rnorm函数,可以从一个普通的分布生成随机的样本。输入下列代码,而后按ENTER,你就能获得10个随机数。

  >rnorm(10)

  [1] -0.949 1.342 -0.474 0.403

  [5] -0.091 -0.379 1.015 0.740

  [9] -0.639 0.950

  第一行的rnorm是函数,10是参数,决定了产生多少个随机数。下面三行是结果,产生了10个随机数,生成一个10长度的向量。

  再从新输入一次就会产生新的10个随机数。可使用上箭头来恢复前一个指令。若是你想经过一个平均值为1.2标准差为3.4的普通分布获得10个随机数,能够输入:

  >rnorm(10, mean=1.2, sd=3.4)

  能够看出rnorm有三个参数,能够只给出第一个参数,后两个参数会用默认值代替。RStudio在你输入rnorm的时候会自动显示参数信息。

5. 图表

  R能够生成图表。简单的例子:

  > x = rnorm(100)

  > plot(x)

  结果会生成这个图:

 

  练习:生成100个随机数的图表。

6. 帮助和文档

  输入:

  >help(rnorm)

  可以获得rnorm这个函数的描述,包括参数以及默认值等等。输入:

  > example(rnorm)

  可以获得rnorm的一些使用例子。输入:

  >help.start()

  能够获得一个基于HTML编写的帮助总览。

  当输入函数名称以及一个左括号后,按TAB键能够获得函数的参数信息,见下图。

   

  其余有用的连接:

  http://cran.r-project.org/doc/manuals/ R-intro.pdf一个完整的手册

  http://cran.r-project.org/doc/contrib/ Short-refcard.pdf一个简短的参考文档

  http://zoonek2.free.fr/UNIX/48_R/all. html包含了丰富的例子

  http://www.statmethods.net/也叫Quick-R,提供了高效率的帮助。

  http://mathesaurus.sourceforge.net/编程语言的词典。

  使用谷歌搜索也至关高效。

  练习:查看sqrt函数的帮助。

7. 脚本

  R是一种相似于Python的解释型语言。你能够直接在控制台里打出命令。你也能够把命令存储在文件里,这就叫作脚本,这些文件的拓展名通常是.R,好比foo.R。你能够经过点击File->New->Open file打开编辑窗口来编辑文件。

  先选择要执行的部分,而后按CTRL+ENTER或者点击Run来部分执行代码。若是不选择,那么程序会从光标停留的行开始执行。执行所有代码的命令是:

  > source(“foo.R”)

  也能够点击Run all,或者按CTRL+SHIFT+S来执行所有的代码。

  练习:创建一个名为firstscript.R的文件,指令为产生100个随机数,并用图表展现。屡次执行这个脚本。

8. 数据结构

(1)向量

  使用函数c()来构造向量:

  > vec1 = c(1,4,6,8,10)

  > vec1

  [1] 1 4 6 8 10

  可用[i]来指定向量中的值:

  > vec1[5]

  [1] 10

  能够替换指定位置的值:

  > vec1[3] = 12

  > vec1

  [1] 1 4 12 8 10

  另外一种构造向量的方式,使用seq()函数:

  > vec2 = seq(from=0, to=1, by=0.25)

  > vec2

  [1] 0.00 0.25 0.50 0.75 1.00

  R中有不少基于向量的计算函数。若是将两个长度相同的向量相加,其中的元素会对应相加:

  > vec1 + vec2

  [1] 1.00 4.25 12.50 8.75 11.00

(2)矩阵

  用函数matrix定义矩阵。

  > mat=matrix(data=c(9,2,3,4,5,6), ncol=3)

  > mat

          [,1] [,2] [,3]

  [1,]9  3  5

  [2,]2  4  6

  参数data表示在矩阵中出现的数字。ncol定义了列数,也可使用nrow来定义行数。

  练习:把31-60这几个数放在名为P的向量中,而后放到一个6行5列的矩阵Q中。提示:使用seq函数。

  矩阵的操做与向量相似,指定[row, column]可表示矩阵中元素。

  >mat[1,2]

  [1] 3

  指定整个行:

  >mat[2,]

  [1] 2 4 6

  以矩阵为参数的函数。

  > mean(mat)

  [1] 4.8333

(3)数据帧

  数据帧就是一个矩阵,但与矩阵不一样的是,它的每一列都是有命名的,因此有的时候你可使用其中一个数值而无需知道它的准确位置:

  > t = data.frame(x = c(11,12,14), y = c(19,20,21), z = c(10,9,7))

  > t

    x  y  z

  1  11  20 10

  2  12  20  9

  3  14  21  7

  两种经过使用z列进行平均值运算的方法:

  > mean(t$z)

  [1] 8.666667

  > mean(t[[“z”]])

  [1] 8.666667

  练习:编写一个脚本文件,创建3个随机数向量,每一个向量长度为100,将其命名为x1,x2和x3。创建1个数据帧,名为t,其中的向量为a,b,c,其中a=x1,b=x1+x2,c=x1+x2+x3。调用下列函数:plot(t)和sd(t)。你能理解结果吗?

(4)列表

  列表与矩阵和数据帧不一样的是,它的列长度能够不相同。

  > L = list(one=1, two=c(1,2), five=seq(0,1,length=5))

  > L

  $one

  [1] 1

  $two

  [1] 1 2

  $five

  [1] 0.00 0.25 0.50 0.75 1.00

  能够显示出L中有哪些列:

  > names(L)

  [1] “one”“two”“five”

  也可使用里面的数:

  >L$five + 10

  [1] 10.00 10.25 10.50 10.75 11.00

9. 图表

  简单的图生成:

  > plot(rnorm(100), type=“1”, col=“gold”)

  这个命令生成100个随机数,在图上表示,并链接每个点。type=l就是表示将点用直线链接。col表示线的颜色是金色。

  再来一个直方图的例子:

  >hist(rnorm(100))

  练习:使用下面的命令,用在前一个练习生成的结构中,本身经过实验搞清楚rgb是什么意思,rgb的参数是什么意思;lwd,pch,cex分别是什么意思。

  >plot(t$a, type=“l”, ylim=range(t), lwd=3, col=rgb(1,0,0,0.3))

  >lines(t$b, type=“s”, lwd=2, col=rgb(0.3, 0.4, 0.3, 0.9))

  >points(t$c, pch=20, cex=4, col=rgb(0,0,1,0.3))

  想要知道更多关于图表的信息,输入help(par)。谷歌“R color chart”,能够获得一个关于颜色选择的pdf文件。点击图表窗口的Export,能够选择最佳高度和宽度,而后点击Copy或者Save。

10. 读写文件

  有不少种读写文件的方式,这里只介绍一种。先创建一个数据帧d:

  > d = data.frame(a = c(3,4,5), b = c(12,43,54))

  > d

    a  b

  1  3  12

  2  4  43

  3  5  54

  >write.table(d, file=”tst0.txt”, row.names=FALSE)

  将数据帧d写入文件tst0.txt,参数row.names=FALSE表示不把行名写入文件,由于行名并不重要,只是一些数字而已。

  > d2 = read.table(file=”tst0.txt”, header=TRUE)

  > d2

    a  b

  1  3  12

  2  4  43

  3  5  54

  使用read.table函数将文件中的数据写到d2中。

  练习:用下图数据创建文件tst1.txt。读取并将名为g的列中值乘以5,存入文件tst2.txt。

11. 没法获取的数据

  练习:计算一个有100个随机数的向量的平方根的平均数。会发生什么?

  当某个数据没法获取时,用NA表示:

  > j = c(1,2,NA)

  对于j就不能进行常规的计算了。好比:

  > max(j)

  [1] NA

  计算不出最大值。

  若是必定要计算的话,使用参数na.rm=TRUE,意思大概就是忽略NA的值:

  >max(j, na.rm=TRUE)

  [1] 2

12. 类

  以前接触的都是数,有的时候你可能想处理一些不仅是数的数据,好比一个名称或者一个数据文件。R中有三种类:numeric,character和POSIX。

(1)characters字符

  定义一个字符串,须要加上双引号。

  > m = “apples”

  >m

  [1] “apples”

  > n = pears

  ERROR: object ‘pears’ not found

  也不能用字符串进行数学运算。

  > m+2

  Error in m + 2 : non-numeric argument to binary operator

(2)日期

  日期和时间比较复杂。使用strptime函数是最简单的告诉R语言时间的方法:

  > data1=strptime(c(“20100225230000”, “20100226000000”, “20100226010000”), format=”%Y%m%d%H%M%S”)

  > date1

  [1] "2010-02-25 23:00:00"

  [2] "2010-02-26 00:00:00"

  [3] "2010-02-26 01:00:00"

  先用c()函数创建一个向量,记住用双引号,由于strptime须要字符串做为输入。format参数决定了读入时间的格式。依次是年、月、日、时、分、秒。

  练习:生成一张图,x轴表示今天、2014年的圣尼古拉斯日、你的生日。y轴表示你想在这些日子获得礼物的数目。

13. 编程工具

  若是须要编大程序,可能会用到一些编程语句:

(1)if语句

  > w = 3

  >if(w< 5)

    {

     d=2

  }else{

    d=10

    }

  > d

  2

  学过编程的都明白就不详细说了。

  也能够用于界定特殊的条件:

  > a = c(1,2,3,4)

  > b = c(5,6,7,8)

  > f = a[b==5 | b==8]

  >f

  [1] 1 4

  注意双等于的符号。还有一些其余的符号,好比<、>、!=、<=、>=。若是要验证多于一个条件,使用&表示且,使用|表示或。

(2)for循环

    要定义次数和每次作的动做。

    > h = seq(from=1, to=8)

    > s = c()

    > for(i in 2:10)

      {

      s[i] = h[i] * 10

      }

    > s

    [1] NA 20 30 40 50 60 70 80 NA NA

    首先定义一个向量h。而后创建一个空向量s。for循环的目的是将2到10个元素乘以10,而后放到s中。

    练习:创建一个从1到100的向量,用for循环遍历整个向量,将比5小的值和比90大的值乘以10。其余的值乘以0.1。

(3)编写本身的函数

    > func1 = function(arg1, arg2)

      {

      w = arg1^2

      return(arg2+w)

      }

    > func1(arg1 = 3, arg2 = 5)

    [1] 14

    练习:把上一个练习写成函数,在函数中使用for循环。能够用length函数来定义循环的范围。

14. 一些有用的参考

(1)函数

  R reference card中提到的一些函数:

a) data creation

    • read.table: 从文件中读取一个文件。 参数: header=TRUE: 将第一行读做列名; sep=",": 数据由逗号隔开; skip=n: 不读取前n行。

    • write.table: 将一个表写入文件。

    • c: 将数字集合起来生成一个向量。

    • array: 创建一个向量, 参数: dim: length

    • matrix:创建一个矩阵, 参数: ncol and/or nrow: number of rows/columns

    • data.frame: 创建一个数据帧

    • list: 创建一个列表

    • rbind and cbind: 将两个向量按行或按列组合成一个矩阵

b) extracting data

    • x[n]: 向量中的第n个元素

    • x[m:n]: 第m个到第n个元素

    • x[c(k,m,n)]: 特定位置的元素

    • x[x>m & x<n]: m和n之间的元素

    • x$n: 列表或数据帧中名为n的元素

    • x[["n"]]: 同上

    • [i,j]: 第i行第j列的元素

    • [i,]: 矩阵中的第i行

c) Information on variables

    • length: 矩阵的长度

    • ncol or nrow: 矩阵中的列或行号

    • class: 变量的类

    • names: 列表中一个对象的名字

    • print: 在屏幕上显示变量或字符串

    • return: 在函数中用于返回变量

    • is.na: 判断变量是否为NA

    • as.numeric or as.character: 将类变为数字或字符串

    • strptime: 将字符串的类转换为时间(POSIX)

d) Statistics

    • sum: 向量或矩阵元素的和

    • mean: 向量的平均值

    • sd: 向量的标准差

    • max or min: 最大或最小元素

    • rowSums (or rowMeans, colSums and colMeans): 矩阵中每行/列的和/平均值。结果是一个向量。

    • quantile(x,c(0.1,0.5)): sample the 0.1 and 0.5th quantiles of vector x

e) Data processing

    • seq: 均匀地创建向量(好比from1to100)

    • rnorm: 创建一个基于日常分布的随机数向量

    • sort: 将元素升序排列

    • t: 转置一个矩阵

    • aggregate(x,by=ls(y),FUN="mean"): 将x按照y分为子集,计算子集的平均值,生成一个新的列表。

    • na.approx: interpolate (in zoo package). Argument: vector with NAs. Result: vector without

NAs.

    • cumsum: 累积和,结果是一个向量。

    • rollmean: moving average (in the zoo package)

    • paste: 将字符串黏合在一块儿

    • substr: 将一个字符串分红几个部分

f) Fitting

    • lm(v1sv2): linear fit (regression line) between vector v1 on the y-axis and v2 on the x-axis

    • nls(v1sa+b*v2, start=ls(a=1,b=0)): nonlinear fit. Should contain equation with variables (here v1 and v2 and parameters (here a and b) with starting values

    • coef: returns coe"cients from a fit

    • summary: returns all results from a fit

g) Plotting

    • plot(x): plot x (y-axis) versus index number (x-axis) in a new window

    • plot(x,y): plot y (y-axis) versus x (x-axis) in a new window

    • image(x,y,z): plot z (color scale) versus x (x-axis) and y (y-axis) in a new window

    • lines or points: add lines or points to a previous plot

    • hist: plot histogram of the numbers in a vector

    • barplot: bar plot of vector or data frame

    • contour(x,y,z): contour plot

    • abline: draw line (segment). Arguments: a,b for intercept a and slope b; or h=y for horizontal line at y; or v=x for vertical line at x.

    • curve: add function to plot. Needs to have an x in the expression. Example: curve(x^2)

    • legend: add legend with given symbols (lty or pch and col) and text (legend) at location

(x="topright")

    • axis: add axis. Arguments: side – 1=bottom, 2=left, 3=top, 4=right

    • mtext: add text on axis. Arguments: text (character string) and side

    • grid: add grid

     • par: plotting parameters to be specified before the plots. Arguments: e.g. mfrow=c(1,3)):

number of figures per page (1 row, 3 columns); new=TRUE: draw plot over previous plot.

h) Plotting parameters

    These can be added as arguments to plot, lines,image, etc. For help see par.

    • type: "l"=lines, "p"=points, etc.

    • col: color – "blue", "red", etc

    • lty: line type – 1=solid, 2=dashed, etc.

    • pch: point type – 1=circle, 2=triangle, etc.

    • main: title - character string

    • xlab and ylab: axis labels – character string

    • xlim and ylim: range of axes – e.g. c(1,10)

    • log: logarithmic axis – "x", "y" or "xy"

i) Programming

    • function(arglist){expr}: function definition: do expr with list of arguments arglist

    • if(cond){expr1}else{expr2}: if-statement: if cond is true, then expr1, else expr2

    • for(var in vec) {expr}: for-loop: the counter var runs through the vector vec and does expr each run

    • while(cond){expr}: while-loop: while cond is true, do expr each run

(2)快捷键

    可点击Help->Keyboard Shortcuts查看。

    • CRL+ENTER: 将脚本窗口的命令发送到命令窗口

    • 向上箭头or 向下箭头 in command window: previous or next command

    • CTRL+1, CTRL+2, etc.: change between the windows Not R-specific, but very useful keyboard shortcuts:

    • CTRL+C, CTRL+X and CTRL+V: copy, cut and paste

    • ALT+TAB: change to another program window

    • 向上, 向下, 向左or 向右: move cursor

    • HOME or END: move cursor to begin or end of line

    • Page Up or Page Down: move cursor one page up or down

    • SHIFT+向上/向下/向左/向右/HOME/END/PgUp/PgDn: select

(3)错误信息

    • No such file or directory or Cannot change working directory

    确保工做目录和文件名正确

    • Object ‘x’ not found

    变量x尚未被定义,定义x或者用双引号表示x是一个字符串。

    • Argument ‘x’ is missing without default

    你没有定义参数x,若是参数x是强制性定义的。

    • +

    R正在运行中或者你忘了加右括号。等待,或者单击}、)或单击ESC。

    • Unexpected ’)’ in ")" or Unexpected ’}’ in "}"

    多打了右边括号。

    • Unexpected ‘else’ in "else"

    Put the else of an if-statement on the same line as the last bracket of the “then”-part: }else{.

    • Missing value where TRUE/FALSE needed

    条件部分出现问题,好比(if(x==1)),x是否是NA?

    • The condition has length > 1 and only the first element will be used

    好比(if(x==1))若是x是一个向量就会报错。试一试x[i]。

    • Non-numeric argument to binary operator

    试图对非数字进行运算。试一下class()测试一下数据的类,或用as.numeric()转换为数字。

    • Argument is of length zero or Replacement is of length zero

    变量为控制

相关文章
相关标签/搜索