作者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
推 lung7735:謝謝! 我會試看看的 04/27 23:51
→ andrew43:看起來蠻簡潔的, 若熟sql應該很方便. 04/28 02:03
推 gsuper:來的正好 最近搞SQL搞的快瘋了 04/28 02:29
→ gsuper:看看我再用的語法 04/28 02:29
→ gsuper:x <- paste("echo \"SET CHARSET UTF8; replace into 04/28 02:29
→ gsuper:Customer value(",paste(paste(paste("'",C[g,],"'",sep="" 04/28 02:30
→ gsuper:),collapse=",")),");\"", 04/28 02:30
→ gsuper:"|mysql -u 帳號 -h 主機IP -P PORT -p'密碼' 資料庫", 04/28 02:31
→ gsuper:system(x) 04/28 02:31
→ gsuper:一直寫這種鬼東西寫的我快瘋了 04/28 02:31