代码之家  ›  专栏  ›  技术社区  ›  stevec Zxeenu

为什么sys.time()的class()长度为2?

r
  •  0
  • stevec Zxeenu  · 技术社区  · 6 年前

    这个 class() 我在R中遇到的所有元素的长度都是1。

    一些实例

    library(dplyr)
    
    "string" %>% class %>% length
    # [1] 1
    
    123 %>% class %>% length
    # [1] 1
    
    0.234 %>% class %>% length
    # [1] 1
    
    Sys.Date() %>% class %>% length
    # [1] 1
    

    但是 类() 属于 Sys.time() (与上面的例子一样,长度1本身就是长度2)

    Sys.time() %>% class %>% length
    # [1] 2
    

    为什么?

    1 回复  |  直到 6 年前
        1
  •  2
  •   zacdav    6 年前

    https://stat.ethz.ch/R-manual/R-devel/library/base/html/class.html 值得一读

    但本质上,对象拥有多个类的能力允许其行为在某些情况下发生变化,因为类向量的顺序决定了搜索方法的顺序。

    在这种情况下,你观察到简单的物体往往有一个单一的类。

    Sys.time() 返回一个更加复杂的时间戳,为类实现了各种方法,这些方法可能有所不同。因此,如果要在方法只存在于第二个类中的上下文中尝试该对象,它将使用第二个类方法。

    要查看方法,请尝试以下操作:

    methods(class = "POSIXt")
    methods(class = "POSIXct")