山海之间

R语言学习3-向量

R语言学习3-向量
2020-05-13 · 6 min read
向量 流程 R语言

向量是R语言中最简单也是最常用的数据结构。

向量有两种不同的表现形式:

  • 原子向量:只包含一种数据类型;
  • 列表向量:包含多种数据类型

原子向量

上一节教程中,我们学习了数值序列,实际就是原子向量的一种。其他的原子向量还包括:

  • 逻辑向量
  • 字符向量
  • 整数向量
  • 复数向量

在这节教程中,我们重点了解一下逻辑向量和字符向量。

逻辑向量

逻辑向量包含的值有:

  • TRUE
  • FALSE
  • NA (表示缺失值)

这些值是逻辑“条件”的结果,我们可以尝试一些简单的条件。

首先,创建一个名为num_vect的数值向量,包含0.5, 55, -10, 6这几个值。

> num_vect <- c(0.5, 55, -10, 6)

再创建一个tf的变量,保存num_vect < 1的值,猜猜tf的结果是怎样的?

> tf <- num_vect < 1
> tf
[1]  TRUE FALSE  TRUE FALSE

tf就是一个逻辑向量。 上述代码中的num_vect < 1是一个条件,并且tf告诉我们数值向量num_vect的每个对应元素是否满足此条件。
比如num_vect的第一个元素是0.5,明显0.5 < 1是成立的,所以对应的tf的第一个值是TRUE。其他元素则以此类推。

我们可以再试试其他条件,比如num_vect >- 6:

> num_vect >= 6
[1] FALSE  TRUE FALSE  TRUE

我们可以看到依然是对num_vect中的每个元素进行了是否大于等于6的判断,如果满足条件,则返回TRUE,否则返回FALSE

如果我们有两个逻辑表达式AB,我们可以通过一些逻辑操作符来获取某些信息。

  • A | B(逻辑"或" 又称“联合”): AB至少有一个为真,则返回TRUE
  • A & B(逻辑"与" 又称“交叉”): AB两个都会真, 则返回TRUE
  • !A(逻辑"非" ): 如果A本身为FALSE,则返回TRUE,反之亦然。

下面给出一些表达式,可以预测一下结果是什么:

(3 > 5) & (4 == 4)
(TRUE == TRUE) | (TRUE == FALSE)
((111 >= 111) | !(TRUE)) & ((4 + 1) == 5)

答案是FALSE、TRUE、TRUE最好花费一些时间来尝试这些逻辑运算符的各种组合,直到熟练使用它们。

字符向量

字符向量在R中也很常见。双引号用于区分字符对象,如以下示例所示:

> my_char <- c("My", "name", "is")
> my_char
[1] "My"   "name" "is" 

每个单词都需要使用双引号括起来,这样R就知道这些单词是字符串。

现在my_char是一个长度为3的字符向量。假设我们想将my_char的元素连接在一起成为一个连续的字符串(即长度为1的字符向量)。这个时候就可以使用paste()函数。

> paste(my_char, collapse = " ")
[1] "My name is"

要注意collapse参数,双引号中间是有一个空格,并不是空的。表示当我们将my_char字符向量的元素连接在一起时,我们希望将它们用单个空格分开。当然也可以指定其他连接符,比如-

> paste(my_char, collapse = "-")
[1] "My-name-is"

如果要新增(连接)字符串,可以直接使用c()函数:

> my_name <- c(my_char, "R language")
> my_name
[1] "My"         "name"       "is"         "R language"
> paste(my_name, collapse = " ")
[1] "My name is R language"

在上述示例中,我们使用了paste()函数连接单个字符向量的元素。 paste()也可以用于连接多个字符向量的元素。

> paste("Hello", "world!", sep = " ")
[1] "Hello world!"

当连接多个字符串时,分隔符参数使用sep

对于稍微复杂一点的示例,我们可以连接两个向量,每个向量的长度为3。使用paste()将整数向量1:3与字符向量c("X","Y","X")结合在一起。 这次,使用sep =""在连接的元素之间不留任何空间。

> paste(1:3, c("X", "Y", "Z"), sep = "")
[1] "1X" "2Y" "3Z"

如果我们的向量长度不同,会发生什么? (提示:第一节有提到)

向量会循环使用

> paste(LETTERS, 1:4, sep = "-")
 [1] "A-1" "B-2" "C-3" "D-4" "E-1" "F-2" "G-3" "H-4" "I-1" "J-2" "K-3" "L-4" "M-1" "N-2" "O-3" "P-4" "Q-1" "R-2" "S-3" "T-4" "U-1" "V-2" "W-3" "X-4"
[25] "Y-1" "Z-2"

此外,外面还可以注意到,数值向量1:4paste()函数强制转为字符向量了。

小结

  1. 逻辑向量:存储的是布尔值,需要熟练各种逻辑表达式
  2. 字符向量:注意paste()分隔符参数sepcollapse的不同使用情况。

本文首发于公众号:柠檬培养师(ID: yantinger90),欢迎关注!

Powered by Gridea,浙ICP备17039354号-1,© 2019 - 2020🍋