numeric与double的区别
关于一个type, 有numeric(创建), as.numeric(转换)和is.numeric(判断)这三个函数. 所以numeric与double 来看看这三类函数表现有什么区别.
numeric与double函数没有区别. as.numeric与as.double也没有区别. 但is.numeric和is.double就有区别了.
区别在于: is.numeric在参数的typeof是integer和double都会返回T. 而is.double则只有在base是double的情况下才返回T, integer为base是会返回FALSE的.
比如:
> a=c(1L,2L)
> is.numeric(a)
[1] TRUE
> is.double(a)
[1] FALSE
对于list, 它的typeof本来就不是integer等, 所以即使元素的确都是numeric, is.numeric还是会得到FALSE
> l=list(a=1,b=2)
> is.numeric(l)
[1] FALSE
从下面可以看出: 判断的是base, 而不一定是向量.
> d=Sys.Date()
> class(d)
[1] "Date"
> typeof(d)
[1] "double"
> d
[1] "2020-10-13"
> is.double(d)
[1] TRUE
不解的地方
文档说integer vectors的class包括c("integer", "numeric")
Most vectors have class the result of
mode(x)
, except that integer vectors have classc("integer", "numeric")
and real vectors have classc("double", "numeric")
.
但
> x=integer(3)
> class(x)
[1] "integer"
class并不包括numeric