转换向量类型

不同类型的向量可以被强制转换为一种特定类型的向量。例如,有些数据是数值字符
串,如 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 足
够聪明到可以自动并且精确地执行你想做的事情。在大多数情况下,最好事先确认参与运
算的向量类型是正确设定的;否则,可能会发生意想不到的错误。换言之,只有使用正确
类型的数据对象,才能进行正确的数学运算。

posted @ 2019-01-22 09:57  NAVYSUMMER  阅读(627)  评论(0编辑  收藏  举报
交流群 编程书籍