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 class c("integer", "numeric") and real vectors have class c("double", "numeric").

> x=integer(3)
> class(x)
[1] "integer"

class并不包括numeric

posted @ 2020-10-13 14:31  Tokubara  阅读(1681)  评论(0编辑  收藏  举报