zoukankan      html  css  js  c++  java
  • R语言矩阵维度“消失”的问题

    矩阵(matrix)是R语言中很基础的一种数据结构,也是R语言使用者经常使用的一种数据结构。矩阵的维度一般为二维(m*n)。

    R语言中矩阵的操作是非常简单易懂的,但是在对R语言做矩阵操作时,有个地方需要特别注意。下面我们通过一个例子说明。

    首先,我们创建一个用于测试的矩阵。

    test1 <- matrix(data = c(1:6), nrow = 3, ncol = 2, dimnames = list(c("row1", "row2", "row3"), c("col1", "col2")))

    然后我们查看下这个矩阵,矩阵是一个三行两列的矩阵。

    > test1
         col1 col2
    row1    1    4
    row2    2    5
    row3    3    6

    然后,我们任意取出它们的子矩阵并使用dim()函数查看子矩阵的维度。

    > dim(test1[1:2, ]); test1[1:2, ]
    [1] 2 2
         col1 col2
    row1    1    4
    row2    2    5
    > dim(test1[2, ]); test1[2, ]
    NULL
    col1 col2
       2    5

    我们发现第一次取出某个维度为2*2的子矩阵时,系统正确返回了子矩阵的维度,而当我们第二次取出一个维度为1*2的子矩阵时,系统却未能正确返回子矩阵的维度且维度为NULL。很显然,R语言将这个子矩阵当成向量处理了,因此维度也“消失”了。这个是非常需要注意的,笔者日常使用R语言分析数据的时候,也不经意间落入过这个“圈套”,有时候感觉代码逻辑上没有任何的错误,但当运行程序的时候,就会出现这个某个令人不解的error,然后需要花上一点时间慢慢debug,然后恍然大悟,原来是这个原因。

    解决或者说避免出现这个问题也是非常简单的,我们可以直接使用drop参数。

    > # using the drop parameter
    > dim(test1[2, , drop = FALSE])
    [1] 1 2

    我们可以看到,将drop参数设为FALSE之后,R语言能够正确返回矩阵的维度了。

  • 相关阅读:
    栈——有效括号问题
    链表——判断是否有环,如果有,找到入口节点并返回(转自leetcode,个人留存)
    链表—判断是否有环
    链表—判断是否有环
    链表成对反转
    反转链表
    __attribute__机制
    linux write()
    错题本本-20180919
    C++ 11特性
  • 原文地址:https://www.cnblogs.com/rxzhang/p/12299142.html
Copyright © 2011-2022 走看看