【问题标题】:why the object is vector?为什么对象是矢量?
【发布时间】:2012-07-22 01:39:52
【问题描述】:
> x=c(1,2,3,4,5)  
> x1=list(n1=1,n2=2,n3=x)  
> is.vector(x1)  

[1] 正确

> is.list(x1)  

[1] 正确

为什么 is.vector(x1)=true?我不明白。

【问题讨论】:

    标签: r


    【解决方案1】:

    来自?is.vector

    如果 mode = "any",is.vector 可能会为原子模式、列表和表达式返回 TRUE。

    如果您不希望 is.vector 返回 TRUE 以获得 list,则可以指定 mode

    > is.vector(x1, mode='numeric')
    [1] FALSE
    
    > is.vector(x, mode='numeric')
    [1] TRUE
    

    【讨论】:

      【解决方案2】:
      > is.atomic(x1)
      [1] FALSE
      

      R language definition 中,列表是通用向量,而不是原子向量

      【讨论】:

        【解决方案3】:

        R 中的向量是事物的有序集合。在这种情况下的东西是

        > mode(x1)
        [1] "list"
        

        来自帮助文件

        如果 x 是指定模式的向量,除了名称之外没有其他属性,is.vector 返回 TRUE。

        > attributes(x1)
        $names
        [1] "n1" "n2" "n3"
        

        如果我们要给 x1 另一个属性:

        levels(x1)<-1:3
        
        > x1
        $n1
        [1] 1
        
        $n2
        [1] 2
        
        $n3
        [1] 1 2 3 4 5
        
        attr(,"levels")
        [1] 1 2 3
        
        > is.list(x1)
        [1] TRUE
        
        > is.vector(x1)
        [1] FALSE
        

        它仍然是一个列表,但现在不是一个向量

        来自A brief history of S "S 中的基本数据结构是相似元素的向量:数字、字符串或逻辑值 使用。尽管 S 对象的属性概念直到 1988 年才明确实现, 从一开始,S 就认识到数据的主要向量通常伴随着其他值 描述了数据的特殊属性。例如,矩阵只是一个数据向量和一个辅助 名为 Dim 的二元向量,它告诉维度(行数和列数)。同样,时间序列 有一个 Tsp 属性来告诉每个周期的开始时间、结束时间和观察次数。这些载体 带有属性的结构被称为向量结构,这将 S 与大多数其他系统区分开来。”

        大概它在 R 中是相似的,它是 S 的一个实现,所以这些向量结构不被指定为向量。

        【讨论】:

          猜你喜欢
          • 2010-11-28
          • 1970-01-01
          • 2010-12-03
          • 2018-05-25
          • 1970-01-01
          • 2020-08-08
          • 1970-01-01
          • 2013-05-29
          相关资源
          最近更新 更多