为什么TRUE
在此处被强制为NA
as.numeric(c(1, 1.0, "1.0", TRUE))
但不在此:
as.numeric(c(1, 1.0, TRUE))
因为"1.0"
的引入将TRUE
转换为"TRUE"
,所以vector
的基本行为是只能有一个class
,并且character
优先于numeric
。因此,矢量中的任何字符,都会将整体转换为character
类
c(1, 1.0, "1.0", TRUE)
[1] "1" "1" "1.0" "TRUE"
这也适用于其他类转换。
as.numeric(c(1, 1.0, "1.0", TRUE))
#[1] 1 1 1 NA
as.logical(c(1, 1.0, "1.0", TRUE))
[1] NA NA NA TRUE
as.logical(c(1, 1.0, TRUE))
[1] TRUE TRUE TRUE
在第三种情况下,TRUE被强制为1,并且除了0之外,所有其他值都将为TRUE,而在第一种情况下数值被类型转换,而"0"是TRUE;TRUE";是字符串,而不是。在第二种情况下,我们正在转换为逻辑,因此"TRUE"
被转换为TRUE
,其中其他的是"0";字符";从而返回NA
as.logical("1")
[1] NA