R学习1-基础

Made by Mike_Zhang


所有文章:
R学习1-基础
R学习2-I/O
R学习3-Vector List Matrix
R学习4-Data Frame
R学习5-Graphics


1 R Start

R: The R Project for Statistical Computing官网地址: https://www.r-project.org/

  1. 进入网站后点击 CRAN
  2. 选择对应地区的mirror,如:TUNA Team, Tsinghua University
  3. 下载对应系统的安装包并安装。
  4. 打开R应用,显示R Console界面,如下图:

R Console

输入命令后按下回车,测试如下:

1
2
> 1+1
[1] 2

在R中,输出的结果为向量(Vector),上述例子中结果为只有一个元素向量,因此结果2被标记为[1],指向量的第一个元素。


2 Print Out

在输入完命令后按下回车,R会自动调用print()方法来输出结果在console中,用户也可以使用print()或者cat()方法来输出。

2.1 print()

如下:

1
2
3
4
> print(2^2)
[1] 4
> print(pi)
[1] 3.141593

但是print()方法有限制,其一次只能输出一个对象,不支持同时输出多个对象,如下:

1
2
3
4
5
6
7
> print(2^2,"pi")
Error in print.default(2^2, "pi") : invalid printing digits -2147483648
In addition: Warning message:
In print.default(2^2, "pi") : NAs introduced by coercion
>
> print("pi is: ",pi,".")
Error in print.default("pi is: ", pi, ".") : invalid 'quote' argument

如要输出多个对象,则可以使用多个print()语句,并用分号(;)隔开:

1
2
3
4
> print("pi is: ");print(pi);print(".")
[1] "pi is: "
[1] 3.141593
[1] "."

另一种方法就是使用cat()方法。


2.2 cat()

1
2
> cat("pi is:",pi*2,".","\n")
pi is: 6.283185 .

此方法可以把多个对象结合起来连续输出,注意cat()方法输出时默认用空格隔开每个对象,并不是换行符(\n), 因此建议在此输出方法末尾加上换行符(\n)。


3 Variables

3.1 Assignment

  1. 变量赋值符:<- (由一个less-than character< 和 hyphen-连接而成,中间无空格

如:

1
2
x <- 1
y <- 2^2

变量无需定义即可赋值

  1. 强变量赋值符: <<-
    如:
1
x <<- 1

此符号把变量值赋值给一个全局变量(global variable),而不是局部变量(local variable)

注意:
=->符号也支持变量的赋值,但是并不推荐使用,前者容易和比较符产生歧义,后者在表达式过长时不便于阅读。


3.2 List Variables

使用ls()ls.str()方法来列出目前工作区定义了那些变量和方法。

3.2.1 ls()

1
2
3
4
5
6
> x <- 1
> y <- 2
> z <- 3
> f <- function(n) n^2
> ls()
[1] "f" "x" "y" "z"

此方法会返回一个字符串向量,包含了定义的变量名和方法名
若工作区内没有定义的变量名或者方法名,则:

1
2
> ls()
character(0)

3.2.2 ls.str()

1
2
3
4
5
> ls.str()
f : function (n)
x : num 1
y : num 2
z : num 3

此方法除返回名字外,也会返回变量的值。

但是ls()方法不会返回名字以点(.)开头的变量,如:

1
2
3
> .var = 4
> ls()
[1] "f" "x" "y" "z"

如需要返回所有变量,则需要设置ls()all.name参数为TRUE,如下:

1
2
> ls(all.names=TRUE)
[1] ".Random.seed" ".var" "f" "x" "y" "z"

3.3 Remove Variables

rm()方法可以从工作区移除不需要的变量或者方法,如下:

1
2
3
4
5
6
7
8
9
10
11
> rm(x)
> x
Error: object 'x' not found

> ls()
[1] "f" "y" "z"
> rm(y,z)
> y
Error: object 'y' not found
> z
Error: object 'z' not found

变量或方法一旦被移除,则不可以撤回。

也可以设置rm()方法的list参数为ls(),则可以移除整个工作区的变量以及方法,如下:

1
2
3
4
5
6
> x <- 1
> y <- 2
> z <- 3
> rm(list=ls())
> ls()
character(0)

注意!
谨慎使用rm(list=ls())方法。
不要在分享给他人的R文件中使用此方法,会有删除全部内容的风险!


4 Vector Creation

向量(Vector)是R的核心组成部分,其可以包含数字,字符串,逻辑值,但不可以是混合体。

使用c(...)语句可以初始化一个向量,如下:

1
2
3
> v <- c(1,2,3,3,4,5,6)
> v
[1] 1 2 3 3 4 5 6

也可以通过此语句合并两个向量,组成一个新的向量,如:

1
2
3
4
> v2 <- c(1,1,2,2,3,4,5)
> vc <- c(v,v2)
> vc
[1] 1 2 3 3 4 5 6 1 1 2 2 3 4 5

若用户尝试合并两个不同类型的向量,则R会尝试把它们转换成相同类型的向量,如下:

1
2
3
4
5
> a <- c(1,2,3)
> b <- c('one','two','three')
> c <- c(a,b)
> c
[1] "1" "2" "3" "one" "two" "three"

上面例子中,R就把numeric的123转换成了character类型。

使用mode()方法可以查看变量的类型,如下:

1
2
> mode(c)
[1] "character"

5 Basic Statistics

R中一些基础的数据分析方法:

mean():计算均值
median():计算中位数
sd():计算标准差
var():计算方差

如下:

1
2
3
4
5
6
7
8
9
10
> v
[1] 1 2 3 3 4 5 6
> mean(v)
[1] 3.428571
> median(v)
[1] 3
> sd(v)
[1] 1.718249
> var(v)
[1] 2.952381

若数据中出现了NA(not available),可能会造成方法返回NA,如下:

1
2
3
4
5
> n <- c(1,2,3,3,4,5,6,NA)
> n
[1] 1 2 3 3 4 5 6 NA
> mean(n)
[1] NA

可以设置上述几个方法的na.rm属性为TRUE,以让R忽略NA,如下:

1
2
3
4
5
> n <- c(1,2,3,3,4,5,6,NA)
> n
[1] 1 2 3 3 4 5 6 NA
> mean(n,na.rm=TRUE)
[1] 3.428571

6 Sequences

6.1 n:m expression

1
2
3
4
5
6
7
8
> 0:10
[1] 0 1 2 3 4 5 6 7 8 9 10
> 10:0
[1] 10 9 8 7 6 5 4 3 2 1 0
> 5:15
[1] 5 6 7 8 9 10 11 12 13 14 15
> 15:5
[1] 15 14 13 12 11 10 9 8 7 6 5

此方法的步长只能为1或-1。

6.2 seq()function

此方法有三个参数,规定起点,终点以及步长,如下:

1
2
3
4
> seq(from=1,to=10,by=2)
[1] 1 3 5 7 9
> seq(from=10,to=1,by=-3)
[1] 10 7 4 1

或者可以规定序列的长度,R会自动计算出适合的步长,如下:

1
2
3
4
5
6
> seq(from=10,to=1,length.out=3)
[1] 10.0 5.5 1.0
> seq(from=1,to=10,length.out=5)
[1] 1.00 3.25 5.50 7.75 10.00
> seq(from=1.5,to=10.5,length.out=6)
[1] 1.5 3.3 5.1 6.9 8.7 10.5

小数也适用起点与终点。

6.3 rep()function

此方法会重复输出指明的值,并返回一个向量,如下:

1
2
3
4
5
6
> rep(2,5)
[1] 2 2 2 2 2
> rep(1,0)
numeric(0)
> rep(pi,3)
[1] 3.141593 3.141593 3.141593


7 Comparing

R中的比较符有==,!=,<,>,<=,>=,比较表达式返回TRUE或者FALSE

可以进行单个值之间的比较,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
> 1<2
[1] TRUE
> 0==1
[1] FALSE
> pi != 3
[1] TRUE
> pi==pi
[1] TRUE
> x <- 3
> x == x
[1] TRUE
> x < pi
[1] TRUE

也可以进行向量间的比较,返回一个布尔类型的向量,如下:

1
2
3
4
5
6
7
8
> a==b
[1] FALSE TRUE FALSE
> a!=b
[1] TRUE FALSE TRUE
> a<b
[1] TRUE FALSE FALSE
> a>b
[1] FALSE FALSE TRUE

也可以进行向量和单个值的比较,R会让单个值逐个和向量中的元素进行比较,返回一个布尔类型的向量,如下:

1
2
3
4
5
6
7
8
9
10
> a <- c(1,2,3)
> x <- 3
> a == x
[1] FALSE FALSE TRUE
> a<x
[1] TRUE TRUE FALSE
> a>x
[1] FALSE FALSE FALSE
> a!=x
[1] TRUE TRUE FALSE

any方法:
向量中存在任何一个TRUE就返回TRUE,如下:

1
2
3
4
5
6
> a <- c(1,2,3)
> x <- 3
> any(a==x)
[1] TRUE
> any(a<x)
[1] TRUE

all方法:
向量中所有都为TRUE才返回TRUE,如下:

1
2
3
4
5
6
> a <- c(1,2,3)
> x <- 3
> all(a==x)
[1] FALSE
> all(a==a)
[1] TRUE

8 Vector Elements

注意:
在R中,向量的下标从1开始,不是0!

  1. v[x]

    1
    2
    3
    4
    5
    6
    7
    > v <-c(1,2,3,4,5,6,7,8,9,10)
    > v[2]
    [1] 2
    > v[1]
    [1] 1
    > v[0]
    numeric(0)
  2. v[n:m]
    为闭区间,两端都包括。

    1
    2
    3
    4
    > v[2:3]
    [1] 2 3
    > v[4:10]
    [1] 4 5 6 7 8 9 10

    注意:
    若想访问向量的第1位到第n+1位元素,应为v[1:(n+1)],并不是v[1:n+1]

  1. v[c(a,b,c,...)]
    通过data vector访问。

    1
    2
    3
    4
    > v[c(1,3,5)]
    [1] 1 3 5
    > v[c(1:6)]
    [1] 1 2 3 4 5 6
  2. v[-x]
    忽略某些元素。

    1
    2
    3
    4
    5
    6
    > v[-1]
    [1] 2 3 4 5 6 7 8 9 10
    > v[-5]
    [1] 1 2 3 4 6 7 8 9 10
    > v[-(1:5)]
    [1] 6 7 8 9 10
  3. v[x<y]
    通过逻辑表达式选取,若TRUE则选取,若FALSE则忽略。

    1
    2
    3
    4
    > v[v>5]
    [1] 6 7 8 9 10
    > v[v %% 2 == 1]
    [1] 1 3 5 7 9
  4. names()
    通过names()方法,给某一向量的元素加上names属性,并通过此属性访问到对应的值。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > value <- c(1,2,3)
    > names(value) <- c('one','two','three')
    > value
    one two three
    1 2 3
    > value['one']
    one
    1
    > value[c('one','three')]
    one three
    1 3

9 Operator Precedence


Operator precedence - P. Teetor, R Cookbook

自上而下为高优先级低优先级


10 Functions

R中有自定义函数,语法如下:

1
2
3
4
5
function(p1,p2,...) {
expr1
expr2
...
}

例如:

1
2
3
4
5
6
> v <- c(1,2,3)
> addOne <- function(x) return(x+1)
> addOne(1)
[1] 2
> addOne(v)
[1] 2 3 4

可以使用lapply()方法调用方法,如下:

1
2
3
4
5
6
7
8
9
> lapply(v,addOne)
[[1]]
[1] 2

[[2]]
[1] 3

[[3]]
[1] 4

11 R Editor Window

除了在R的console中编辑代码,也可以在编辑窗口中全部编写完成再运行,如下:

新建一个编辑窗口,输入全部代码;
鼠标放在某一行,按下cmd+enter,执行此行代码;
或选中某几行或全部代码,按下cmd+enter,执行选中的代码。


R Editor Window

参考

P. Teetor, R Cookbook. Sebastopol: O’Reilly Media, Incorporated, 2011.


写在最后

初次接触R语言,相关的知识会继续学习,继续更新.
最后,希望大家一起交流,分享,指出问题,谢谢!


原创文章,转载请标明出处
Made by Mike_Zhang




感谢你的支持

R学习1-基础
https://ultrafish.io/post/R-learning-1/
Author
Mike_Zhang
Posted on
December 17, 2021
Licensed under