不同类型的向量可以被强制转换为一种特定类型的向量。例如,有些数据是数值字符

串,如 1 和 20。如果不进行转换处理,就无法对其进行数值运算。幸运的是,这两个字符

串可以转换为数值向量。转换后,R 就能够将它们识别为数值数据而不是字符串,这样我

们就能对其进行数值运算了。

在演示典型的向量类型转换之前,先创建一个字符向量:

strings <- c("1", "2", "3")

class(strings)

## [1] "character"

正如前面所提到的,字符串不能够直接进行数值运算:

strings + 10

## Error in strings + 10: 二进列运算符中有非数值参数

我们可以用 as.numeric( )将字符向量转换为数值向量:

numbers <- as.numeric(strings)

numbers

## [1] 1 2 3

class(numbers)

## [1] "numeric"

现在就能够对数字进行数值运算了:

numbers + 10

## [1] 11 12 13

is.*函数(例如 is.numeric( )、is.logical( )以及 is.character( ))用

来检验给定对象的类型,as.*函数用来转换向量的类型:

as.numeric(c("1", "2", "3", "a"))

## Warning: 强制改变过程中产生了 NA

## [1] 1 2 3 NA

as.logical(c(-1, 0, 1, 2))

## [1] TRUE FALSE TRUE TRUE

as.character(c(1, 2, 3))

## [1] "1" "2" "3"

as.character(c(TRUE, FALSE))

## [1] "TRUE" "FALSE"

这似乎意味着所有类型的向量都能转换为其他任意类型。然而,事实上,向量类型转

换需要遵循一系列规则。

上述代码块的第一行试图将一个字符向量转换为数值向量,这和我们之前的示例一样。

显然,最后一个元素不能被转换为数字,因此相应位置产生了缺失值。除了最后一个元素,

其他都完成了转换。

将数值向量转换为逻辑向量的规则是:只有 0 转换为 FALSE,其他所有非零数字均转

换为 TRUE。

所有数据都可以表达成字符形式,因此每种类型的向量均可转换成字符向量。然而,如果

数值向量或逻辑向量被强制转换成字符向量,那么除非再被转换回来,否则转换后的向量不能

直接与其他数值向量或逻辑向量进行算术运算。这就是上文所述,以下代码无法运行的原因:

c(2, 3) + as.character(c(1, 2))

## Error in c(2, 3) + as.character(c(1, 2)): 二进列运算符中有非数值参数

从上面的例子可知,尽管 R 没有对数据类型强加严格的规则,但是这并不意味着 R 足

够聪明到可以自动并且精确地执行你想做的事情。在大多数情况下,最好事先确认参与运

算的向量类型是正确设定的;否则,可能会发生意想不到的错误。换言之,只有使用正确

类型的数据对象,才能进行正确的数学运算。