• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

R语言矩阵维度“消失”的问题

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

矩阵(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语言能够正确返回矩阵的维度了。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap