为什么 'as.numeric(c(1, 1.0, "1.0" , TRUE))' 为"TRUE"元素返回 'NA'?

  • 本文关键字:TRUE 返回 NA 元素 numeric as r
  • 更新时间 :
  • 英文 :


为什么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

最新更新