R语言操作数据库
以下内容出自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)”会出现如下窗口:
其中,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语言操作数据库的更多相关文章
- R语言RODBC数据库操作
最近准备做一个股票的数据库,用R语言来获取数据,然后存在SQL Sever 2016 express 里面,虽然前面接触过一些操作,但是还是很不熟悉,现在数据已经能获取到了,是时候好好学习一下怎么用R ...
- 39.C语言操作数据库
一.准备工作: sqlite3工具集:链接:https://pan.baidu.com/s/1mjufXZa 密码:2ui7 安装步骤: 打开如下文件夹,找到sqlite3.dll,并放入系统目录 2 ...
- Go语言操作数据库及其常规操作
Go操作MySQL 安装: go get -u github.com/go-sql-driver/mysql GO语言的操作数据库的驱动原生支持连接池, 并且是并发安全的 标准库没有具体的实现 只是列 ...
- R语言读入数据库的中英名词互译测试并计分脚本(考试用)
1. 分子生物学中英文.csv,输入文件,两列,以tab键分隔的txt文本,没有列名 2. 错误的名解.csv, 如果在测试中拼写错误,会写出到这个文件,可用这个容易犯错的名词进行新的测试 3. 注意 ...
- 分享一个以前写的基于C#语言操作数据库的小框架
一:前言 这个是以前写的操作MySQL数据库的小型框架,如果是中小型项目用起来也是很不错的,里面提供Filter.ModelPart.Relationship等机制实现操作数据库时的SQL语句的拼接和 ...
- 如何在Linux下用C/C++语言操作数据库sqlite3(很不错!设计编译链接等很多问题!)
from : http://blog.chinaunix.NET/uid-21556133-id-118208.html 安装Sqlite3: 从www.sqlite.org上下载Sqlite3.2. ...
- R语言操作mysql上亿数据量(ff包ffbase包和ETLUtils包)
平时都是几百万的数据量,这段时间公司中了个大标,有上亿的数据量. 现在情况是数据已经在数据库里面了,需要用R分析,但是完全加载不进来内存. 面对现在这种情况,R提供了ff, ffbase , ETLU ...
- 使用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) ...
- C语言ODBC数据库操作
今天我们来介绍一下C语言操作数据库的方法,这里我们使用的是ODBC方式.环境是WIN7+VC6.其他环境也差不多,具体情况具体分析. 首先是环境的配置以及数据源的添加.这里就不去解释了,相关资料网上有 ...
随机推荐
- AVPlayer的使用本地视频
1引入AVFoundation.framework框架 2引入头文件<AVFoundation/AVFoundation.h>,并拖入需要播放的视频文件 代码如下: 自定义播放的View, ...
- ASP.NET MVC Controller Session问题
发现问题 最近在项目中遇到这样一个问题,一直没办法重现,所以几天都没有解决. 测试那边给出的问题是这样的:每天早上来的时候,第一次通过单点登录到系统的时候,总会跳转回登录界面,再次登录就好了.当时给我 ...
- 记<<ssh穿透防火墙连接内网的机器(不用路由端口映射)>>
场景: 在家连接公司的内网服务器. 需求: 不用设置端口映射在家用putty登录公司内网服务器. 条件: 有一台公网服务器做转发,有开放端口的控制权.(公网服务器可以是阿里云ECS, 腾讯云主机这样的 ...
- android之外部文件存储和读取
这次借用上次读写内部存储的代码,只是对将更换文件的读写路径即可.这里需要对获取SDcard的读写权限. 一.AndroidManifest.xml 这里增加了对外部存储设备的读写权限 <?xml ...
- HTML5——同步购物车
同步购物车,及打开两个或多个界面,选择购物时同步,让显示的内容一致,这样不至于购买出错. 核心:利用storage事件和localStorage本地存储实现 图片简单展示: <!DOCTYPE ...
- bootstrap 多个 modal 相互遮挡
当一个页面有多个modal时,他们的z-index都是相同的,会产生一个模态框被另一个挡住,失去焦点 此时在模态框的div上加入style="display: none;"就可以.
- Html巩固
1.html元素都支持全局属性(通用的属性)和事件属性. a标签:定义一个超文本链接,链接到另一个超文本文件的! button:定义一个点击按钮,按钮是出发当前页面的事件.
- JS模式:策略模式,感觉就是一个闭包存储信息,然后是加一些验证方法--还看了老半天
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- 【HDU 2955】Robberies(DP)
题意是给你抢劫每个银行可获得的钱m和被抓的概率p,求被抓的概率小于P,最多能抢多少钱.01背包问题,体积是m,价值是p.被抓的概率不是简单相加,而应该是1−Π(1−p[i])DP:dp[i]表示抢到i ...
- 【UVA 11078】BUPT 2015 newbie practice #2 div2-A -Open Credit System
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=102419#problem/A In an open credit system, the ...