【问题标题】:Why does is.vector() return TRUE for list?为什么 is.vector() 为列表返回 TRUE?
【发布时间】:2011-05-17 14:57:50
【问题描述】:

我是 R 初学者。浏览 R 文档时,我偶然发现了这句话?is.vector"如果 mode = "any",is.vector 可能为原子模式、列表和表达式返回 TRUE。"

我只是好奇——为什么?我读过的所有文档都指出列表和向量是两种不同的数据类型。是否有一些我没有得到的更深层次的 R 数据类型概念?

【问题讨论】:

    标签: r


    【解决方案1】:

    列表(在大多数情况下)本身就是一个向量。来自?list 的帮助文件:“R 内部的大多数列表都是通用向量,而传统的点对列表(如 LISP 中)可用但很少被用户看到(除了作为函数的形式)。” em>

    这意味着您可以使用vector 为列表预分配内存:

    x <- vector("list", 3)
    class(x)
    [1] "list"
    

    现在为列表中的第二个元素分配一个值:

    x[[2]] <- 1:5
    
    x
    
    [[1]]
    NULL
    
    [[2]]
    [1] 1 2 3 4 5
    
    [[3]]
    NULL
    

    请参阅?list?vector 了解更多详情。

    【讨论】:

    • 这解释了函数返回的原因。它没有解释为什么语言就是它的原因。有人对此有任何见解吗?
    【解决方案2】:

    请参阅R Internals 手册的R Internal Structures 部分(特别是第 1.1.1 部分)。列表(在您所说的意义上)是VECSXP,一种向量。

    【讨论】:

    • @Quant Guy:使用 R 不需要学习内部结构,但如果你想“深入了解”,它会很有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2021-11-10
    • 2010-09-13
    • 2017-05-03
    • 2017-03-26
    相关资源
    最近更新 更多