【问题标题】:Vector vs. List vs. Single-row matrix vs. Single-column matrix with R向量 vs. 列表 vs. 单行矩阵 vs. 带有 R 的单列矩阵
【发布时间】:2017-10-01 18:16:51
【问题描述】:

在 R 控制台中输入时:

1 + 2

我们得到,作为答案:

[1] 3

前面的[1]是不是表示“输出是一个矩阵,这个矩阵第一行的元素是:3”

更一般地说,这些对象是向量、列表、单行矩阵还是单列矩阵?

  • 1 + 2(即3,即只是一个数字)

  • c(1,-2,3,14)

  • A = matrix(c(1,-2,3,14),2,2)
    A[1,]:这是矩阵的第一行。它是 (1, 2) 单行矩阵还是只是一个向量或一个列表?

  • A[,2]:这是矩阵的第二列。它是 (2, 1) 单列矩阵还是只是一个向量或一个列表?

我已经阅读了几次文档,但我想知道是否存在记住这一点的经验法则?

【问题讨论】:

    标签: r matrix vector


    【解决方案1】:

    基本上,要检查 R 中的数据类型,您可以使用 base 包中包含的几个函数。

    现在,专注于您的明确问题:

    > is.vector(1 + 2)
    [1] TRUE
    > is.atomic(1 + 2)
    [1] TRUE
    > length(1 + 2)
    [1] 1
    

    因此,结果存储在长度为 1 的向量中。

    > is.vector(c(1,-2,3,14))
    [1] TRUE
    > is.atomic(c(1,-2,3,14))
    [1] TRUE
    

    由于c(...)初始化一个向量对象,显然数据类型是向量。

    > is.matrix(A)
    [1] TRUE
    > is.vector(A)
    [1] FALSE
    > is.atomic(A)
    [1] TRUE
    > is.vector(A[1, ])
    [1] TRUE
    > is.atomic(A[1, ])
    [1] TRUE
    > is.matrix(A[1, ])
    [1] FALSE
    > is.vector(A[, 2])
    [1] TRUE
    > is.atomic(A[, 2])
    [1] TRUE
    > is.matrix(A[, 2])
    [1] FALSE
    

    最后,对矩阵进行逐行或逐列子集化也会返回一个向量而不是矩阵。

    有关检查标量,请参阅this question

    编辑:

    正如@Rich Scriven 所提到的,R 中有两种类型的向量:atomicgeneric 向量。实际上,上面示例中使用的函数is.vector(x) 也为列表返回TRUE。除此之外,is.atomic(x) 仅检查包含一种原始数据类型(逻辑、整数、实数、复数、字符或原始)数据的 原子 向量。此外,我还在上述示例中添加了相应的 is.atomic(x) 函数调用。

    【讨论】:

    • is.vector 在这里没有用,因为列表也是向量。 is.vector(list(1 + 2)) 也是如此。我觉得is.atomic比较合适,OP应该学习一下原子向量和列表向量的区别。
    • 其次,R中没有标量这种东西。它只是一个长度为1的原子向量。
    • @RichScriven 为了确保理解,您能否举一个不是向量的列表示例,反之亦然?例如,c(1,2,3,4)1:10 是列表还是向量?
    • @taupe117 这些都是原子向量。试试list(c(1,2,3),c(1,2))。然后看看当你unlist() 那个list 时会发生什么。
    猜你喜欢
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 2015-12-22
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    相关资源
    最近更新 更多