作者Wush978 (拒看低质媒体)
看板R_Language
标题[情报] R tips: RSQLite
时间Sat Apr 27 01:39:38 2013
[关键字]: R, database, SQLite
RSQLite 提供一个简便的介面让R User可以处理超过记忆体的表格。
并且使用者不需要事先架设任何database system。
ps. 若同时只有单一程式会改资料库时,SQLite的效能是非常棒的
也算是一个简易的学习DBI 介面的机会。
熟悉DBI 介面後,要使用MySQL 、PostgreSQL等资料库系统也很像。
---
事实上我个人建议,如果表格的大小超过可用记忆体的一半,
就要考虑使用database system了。
因为R 在修改table的时候并不一定是直接修改原本的记忆体,
而是会复制一份副本出来。所以记忆体很容易不小心被吃光後就...
---
以下做个范例用法:
```r
library(RSQLite)
db.path <- "test.db"
db <- dbConnect("SQLite", db.path)
dbWriteTable(db, "iris", iris)
dbDisconnect(db)
```
iris 就会被写入"test.db"
```r
db <- dbConnect("SQLite", db.path)
iris <- dbReadTable(db, "iris")
dbDisconnect(db)
```
这样可以再把iris从"test.db"中读回记忆体
批次处理资料则可以使用append指令
```r
library(RSQLite)
db.path <- "test.db"
db <- dbConnect("SQLite", db.path)
dbWriteTable(db, "big_data", big_data.part1)
dbWriteTable(db, "big_data", big_data.part2, append=TRUE)
# ...
dbDisconnect(db)
```
另外注意预设似乎会包含row.names
之後只要建好index 後,仍然可以高效的做选取
```r
library(RSQLite)
db.path <- "test.db"
db <- dbConnect("SQLite", db.path)
res <- dbSendQuery(db, "SELECT Sepal_Length FROM iris WHERE Species =
'setosa'")
data <- fetch(res) # 这里也许需要读取很多次,看资料量
dbDisconnect(db)
```
--
欢迎加入 Taiwan R User Group :
http://www.facebook.com/Tw.R.User
我们每周一都有在「政大公企中心(台北市金华街187号)西楼WB05」
举办Machine Learning / Data Mining Monday:
报名
http://www.meetup.com/Taiwan-R/
聚会影片
https://www.youtube.com/user/TWuseRGroup
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.231.162.250
1F:推 lung7735:谢谢! 我会试看看的 04/27 23:51
2F:→ andrew43:看起来蛮简洁的, 若熟sql应该很方便. 04/28 02:03
3F:推 gsuper:来的正好 最近搞SQL搞的快疯了 04/28 02:29
4F:→ gsuper:看看我再用的语法 04/28 02:29
5F:→ gsuper:x <- paste("echo \"SET CHARSET UTF8; replace into 04/28 02:29
6F:→ gsuper:Customer value(",paste(paste(paste("'",C[g,],"'",sep="" 04/28 02:30
7F:→ gsuper:),collapse=",")),");\"", 04/28 02:30
8F:→ gsuper:"|mysql -u 帐号 -h 主机IP -P PORT -p'密码' 资料库", 04/28 02:31
9F:→ gsuper:system(x) 04/28 02:31
10F:→ gsuper:一直写这种鬼东西写的我快疯了 04/28 02:31