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

《R语言编程艺术》——3.6 避免意外降维

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

3.6 避免意外降维

在统计学领域,“降维”(dimension reduction)是有益的,也存在很多降维的统计学方法。假设我们需要处理10个变量,如果能把变量个数降到3,却还能保留数据的主要信息,何乐而不为呢?
但是在R里,降维指的完全是另外一件事情,而且通常要避免。比如我们有一个4行的矩阵,提取其中的一行:

这个看似没有问题,但是注意看r的显示格式,是向量的格式,而非矩阵的格式。也就是说,r是一个长度为2的向量,而不是一个1乘2的矩阵。我们可以用几种方法来验证它的确已经变成向量了:

可以看到z是有行数与列数的,但是r没有。类似的,str()显示z的行索引区间为1:4,列索引区间为1:2。而r的索引区间是1:2。毫无疑问,r是一个向量而非矩阵。
把r变成向量看似没有问题,但在某些涉及大量矩阵操作的程序中会引起错误。也许程序在大部分情况下都能正常运行,但在少数情况下就是通不过。例如某个程序从一个给定的矩阵里提取一个子矩阵,然后对这个子矩阵进行一些矩阵操作。如果这个子矩阵只有一行,R会把它当作向量处理,后面的矩阵操作无法运行在这个向量上,程序会出错。
幸好R里有办法禁止矩阵自动减少维度:使用drop参数。仍以上述矩阵z为例:

现在r是一个1乘以2的矩阵而非由两元素组成的向量。
因此,需要经常性地在矩阵操作代码里使用参数drop=FALSE。
为什么说drop是一个参数呢?因为 [ 事实上也是一个函数,跟+等操作符一样。请看以下代码:


鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
R语言Copula的贝叶斯非参数估计发布时间:2022-07-18
下一篇:
《数据科学:R语言实现》——2.8 获取Facebook数据发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

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

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

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