R 处理大规模数据

      说起R的弱点,肯定会有一条“处理大规模数据不行”。而且一般都是在和SAS之类的大系统比较时被提起的。这样看来也确实没错,如果数据量太大,哪怕只有一两G的时候,光读成数据框恐怕就要把内存撑爆。如果R只是一个软件系统,这显然是很大的软肋。但问题是R不是一个像SAS之类的软件系统,而是语言或者环境。

  作为语言,不存在不能处理大量数据的可能性,拿C来说,直接创建一个2G的数组肯定也挂,但是不会有人这样做,因为内存是可以被灵活操控的,无论什么样的数据分析和处理,只要算法数据结构设计合理,至少也能时间换空间,其实大型的统计软件也是这样做的,只是其中的各种方法被封装好了,看上去同样的模型SAS能算出来而R就会爆内存,这是默认的实现方式不同造成的;作为环境,可以调用各类的其他工具,自己解决不了的也会有别人帮忙解决,如果无限扩展,也不会有解决不了的难题

  要让R操纵大规模的数据,最好的办法就是数据库。所有的数据库都会提供API供外部程序调用,每个数据库都会有自己独特的方式,因此一种通用的操纵关系型数据库的方式是有必要的,当前比较流行的方式是ODBC、JDBC和DBI。

  ODBC在所有Windows系统中都有,是微软搞出来的(现在Linux中也有了),Windows下管理工具中直接就带有ODBC的配置,包括默认的微软所有数据库产品以及Oracle,如果要连接MySQL或者其他数据库,可以很方便地下载各自的驱动,然后用ODBC的方式调用。JDBC的功能和ODBC比较像,但是基于JAVA,可以非常方便地跨平台和跨各种数据库。DBI在Perl中很有影响,R和Perl走得非常近,因此R调用数据库的主要方式就是DBI。

  R中有一个DBI的包,基本上是所有数据库连接的基础,不管是安装RMySQL还是ROracle,都依赖于这个包。其实DBI相当于通用的调用方式,每个数据库对应的包相当于各自的驱动,逻辑上似乎反了,但是技术上就这么实现。R中比较推荐的方式就是先安装DBI,然后安装所需要的驱动,用来操作某种数据库。R中也有一个JDBC的包,但不是纯粹的JDBC,也要依赖于DBI,然后基于JAVA跨平台。

  所有数据库操作的包中,只有RODBC是独立的不依赖于DBI,Windows下比较管用,装好ODBC驱动后可以很方便地用这个包操纵数据库。

  R连接数据库非常简单,如果要更有效率就需要对数据库有很好的理解了。

PS: 如果你的PC是 64 bit 的,这将省去您很多的烦恼。

cited from: http://jliblog.com/archives/24

posted on 2012-10-16 20:01  EasonCheng  阅读(676)  评论(0编辑  收藏  举报

导航