以下内容出自http://www.douban.com/note/172387172/

CRAN上有很多R的数据库支持包,使R能够对数据库进行读写操作。这些包有:RODBC、DBI、RMySQL、ROracle,、RPostgreSQL、RSQLite、 RJDBC 、RpgSQL等等,支持几乎市面上所有的数据库系统。实现的技术也包括ODBC和JDBC两大方面。其中RJDBC和RpgSQL(基于JDBC)都需要Java的支持。

因为选择很多,所以R操作数据库的方式也很灵活,我本人的电脑系统是64位,情况稍微特殊一点,所以这篇文章会以64位的工作环境下的操作为主。事实上32位的环境更加成熟,选择更多。

首先,介绍工作环境:
         数据库:PostgreSQL v8.4以上(本例中数据库版本为9.0版)
         选择这个数据库的原因,一是因为个人的爱好,2是R文档中的例子几乎清一色的是MySQL,烂 大街了的数据库再多讲就没太大意义。加上这个数据库因为不像MySQL和Oracle那样使用广泛(其实这个数据库使用以及很普及了),所以可以作为一个一般性的例子来参考。
         操作系统:Windows 7 SP1 x64
         其实在Linux上讲这个更有代表性,因为R的原生系统是Linux,并且Linux平台的ODBC和JDBC的配置和Windows系统比相对要复杂一点,但是我的机器上没有Linux,所以只能等以后有机会再补上这一部分的内容。这一回就以Windows系统为主。
         使用的R软件包:RODBC
         本来想使用RpgSQL包的,无奈64位系统下,不管我如何调整,R怎么都不认我的64位的JDK,RPostgreSQL包又不支持新版本的R。无奈,只好用RODBC

下面介绍主要内容:
       第一步: 创建测试用的数据库和数据表
       数据库名就直接用Postgre的默认数据库“postgre”,数据表起名soybean1(工作后遗症,工作用的数据不方便透露,就自己随便填了两个数据上去了),如下图:

第二步:配置ODBC数据源
       Windows下的ODBC配置比较简单。打开“控制面板”,进入“管理工具”菜单,选择“数据源(ODBC)”会出现如下窗口:

其中“PostgreSQL35W”就是PostgreSQL数据库ODBC驱动的名称,倘若没有此项,请先安装PostgreSQL的ODBC驱动(下载地址:http://www.postgresql.org/ftp/odbc/versions/msi/)。安装完成后点击上图界面中的“添加”按钮,选择PostgreSQL的驱动即可。然后再点选上图界面中的“配置”按钮,弹出以下界面:
 

其中,Database填写对应的数据库名称,本例中为“postgres”。Server填写数据库系统的url地址,如果是在本机运行的数据库系统,一般可填“localhost”,本例中即是如此。Port处填写数据库系统的访问端口,不同的数据库一般不同,PostgreSQL的默认端口是“5432”。User Name和Password处分别填写访问数据库用的用户名和密码。所有这些填完后数据源的配置就基本完成了。

第三步:R中建立数据库连接
       本例中使用RStudio作为R的IDE环境,主要是为了操作方便。首先载入RODBC包,然后使用odbcDataSources()函数查看可用的数据源。发现PostgreSQL的数据源名称为“PostgreSQL35W”,记住这个名称。然后建立数据库的连接,使用的命令行如下:
conn=odbcConnect("PostgreSQL35W",uid="postgres",pwd="m4a1",case="tolower")
其中,第一个参数就是刚才odbcDataSources()函数列出的PostgreSQL数据源的名称,uid为用户名
pwd为密码,case参数表示大小写转换,因为Windows默认将字符转换为小写。至此如果不出任何错误的话,就代表连接建立成功,之后就可以进行对数据库的查询或者将处理好的数据框以数据表的形式存入数据库操作。本例中仅给出查询的样例,其他操作请参考RODBC的帮助文档。

 

通常来说,数据库连接的创建是个难点,经常会出现的错误有:参数不正确,比如用户名密码不正确或者数据源名称错误。ODBC驱动失效也可能引起连接建立错误,这种情况一般在配置ODBC数据源的时候就会出现错误,出现这种情况,一般可以通过重新安装ODBC驱动来解决问题。

另外,在32位环境下,RpgSQL借助JDBC也可以实现对数据库的灵活访问,不过我在自己的笔记本上(本子用的32位系统)测试这个包,发现其对Unicode的支持似乎不是太好,数据表的中文表头在读取后会变成乱码,目前暂时没有找到解决方案。

更多内容,请参考http://cran.r-project.org/doc/manuals/R-data.pdf

R语言操作数据库的更多相关文章

  1. R语言RODBC数据库操作

    最近准备做一个股票的数据库,用R语言来获取数据,然后存在SQL Sever 2016 express 里面,虽然前面接触过一些操作,但是还是很不熟悉,现在数据已经能获取到了,是时候好好学习一下怎么用R ...

  2. 39.C语言操作数据库

    一.准备工作: sqlite3工具集:链接:https://pan.baidu.com/s/1mjufXZa 密码:2ui7 安装步骤: 打开如下文件夹,找到sqlite3.dll,并放入系统目录 2 ...

  3. Go语言操作数据库及其常规操作

    Go操作MySQL 安装: go get -u github.com/go-sql-driver/mysql GO语言的操作数据库的驱动原生支持连接池, 并且是并发安全的 标准库没有具体的实现 只是列 ...

  4. R语言读入数据库的中英名词互译测试并计分脚本(考试用)

    1. 分子生物学中英文.csv,输入文件,两列,以tab键分隔的txt文本,没有列名 2. 错误的名解.csv, 如果在测试中拼写错误,会写出到这个文件,可用这个容易犯错的名词进行新的测试 3. 注意 ...

  5. 分享一个以前写的基于C#语言操作数据库的小框架

    一:前言 这个是以前写的操作MySQL数据库的小型框架,如果是中小型项目用起来也是很不错的,里面提供Filter.ModelPart.Relationship等机制实现操作数据库时的SQL语句的拼接和 ...

  6. 如何在Linux下用C/C++语言操作数据库sqlite3(很不错!设计编译链接等很多问题!)

    from : http://blog.chinaunix.NET/uid-21556133-id-118208.html 安装Sqlite3: 从www.sqlite.org上下载Sqlite3.2. ...

  7. R语言操作mysql上亿数据量(ff包ffbase包和ETLUtils包)

    平时都是几百万的数据量,这段时间公司中了个大标,有上亿的数据量. 现在情况是数据已经在数据库里面了,需要用R分析,但是完全加载不进来内存. 面对现在这种情况,R提供了ff, ffbase , ETLU ...

  8. 使用R语言-操作data.frame

    1 向一个data.frame指定列插入一列新数据 1.1 插入一列到指定位置 y<-1:4 data1 <-data.frame(x1=c(1,3,5,7), x2=c(2,4,6,8) ...

  9. C语言ODBC数据库操作

    今天我们来介绍一下C语言操作数据库的方法,这里我们使用的是ODBC方式.环境是WIN7+VC6.其他环境也差不多,具体情况具体分析. 首先是环境的配置以及数据源的添加.这里就不去解释了,相关资料网上有 ...

随机推荐

  1. xcode 出现the file couldn't be opened 怎么解决

    右键——show In finder——显示xcode包内容——将有数字的删除——把有用的xcode双击

  2. 20145215实验四 Android开发基础

    20145215实验四 Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管理器的使用: 掌握Android中事件 ...

  3. 给 Xamarin.Form For Windows Phone APP 加个漂亮的 "头"

    Windows Phone 是那个1%, 我也是那个1%, 不喜勿喷.WP 向来给 android / ios 的粉们一个最直观的印象: 丑.其实"丑"这个东西会一直下去,而且是个 ...

  4. 怎样提高Windows Azure Cloud Service中的WebRole的文件访问权限

    关键字:WebRole 1. 背景 Web应用程序需要读取和写入该项目下的文件的权限. 在默认情况下,W3wp.exe 和WaIISHost.exe的运行账号是Network Service,而Net ...

  5. 3、面向对象以及winform的简单运用(类的初步认识)

    什么是类? “类”是面向对象编程的基本单元,一个类一般包含两种成员:字段和方法——即变量和函数. 例: //字段或变量的定义 public int age; //方法或函数的定义 public int ...

  6. WCF入门(11)

    前言 终于出太阳了. 可惜风太大,凉在阳台上的衣服全被吹到了地上,外加几双袜子被吹掉了,gone. 第11集 Difference between DataContract and MessageCo ...

  7. 第八章:Javascript函数

    函数是这样一段代码,它只定义一次,但可能被执行或调用任意次.你可能从诸如子例程(subroutine)或者过程(procedure)这些名字里对函数概念有所了解. javascript函数是参数化的: ...

  8. new-nav-css

    header:before, header:after ,.navigation:before, .navigation:after,.nav-row:before, .nav-row:after,. ...

  9. python 参数的组合

    现在我们知道python定义函数的参数类型有:必选参数 默认参数 可变参数 关键字参数 但是在我们日常中我们是可以组合使用这些参数的:但是使用的时候,参数定义是有顺序的 定义的顺序必须是:必选参数,默 ...

  10. hdu3397 线段树 成段更新

    这题真的呵呵了.敲了很长时间,调了很多bug,把0 1 输出,解决了.最后想取反,怎么搞都有bug, 最后还是看了大牛们的博客.不过这题真的敲得爽,调bug时基本把线段树过程全部弄了一遍. #incl ...