[R] RSQLite の使い方 (1)

  • ????????????????????

RSQLite(+RSQLite.extfuns)パッケージを使うことで R から SQLite3 へ非常に簡単にアクセス可能になる。SQLite 本体もどうやらパッケージに含まれているようで、事前にインストールする必要がないため、パッケージをインストールするだけで非常に簡単に使い始めることができます(パッケージ自体も 1MB もないくらいのサイズです。如何に SQLite が小さいかがよくわかります)。

クエリーを投げる、トランザクション、などの基本的機能は完備されています。さらにデータフレームを一気に INSERT するための dbWriteTable などのおかげで便利に使えます。以下に使い方を示していきます。

一番シンプルな使い方

# (0) 準備:ドライバに SQLite を指定し,データベースをオープン.
#           コネクション・オブジェクト (S4) が帰ってくるので
#           保持しておく.
dbname="test.db"
library(RSQLite)
driver=dbDriver("SQLite")
con=dbConnect(driver,dbname)

# (1) dbGetQuery : すでに存在するデータベースを open してテーブルを取得
# (hoge というテーブルを持っていると仮定)
tbl=dbGetQuery(con,"SELECT * from hoge;")

# (2) dbSendQuery : テーブルが帰ってこない(SELECT 以外の?)クエリーは
#     dbSendQuery を使うべき → エラー処理が可能に
#     (dbGetQuery でも NULL が返るだけでエラーにはならない)
rs=dbSendQuery(con,"CREATE TABLE new_tbl(id INTEGER, hoge TEXT);")
dbinfo=dbGetInfo(rs)
print(dbinfo)

# dbinfo の中身
#=> $statement
#=> [1] "CREATE TABLE new_tbl(id INTEGER, hoge TEXT);"
#=> $isSelect
#=> [1] 0
#=> $rowsAffected
#=> [1] 0
#=> $rowCount
#=> [1] 0
#=> $completed # 正常に終了したか?
#=> [1] 1
#=> $fieldDescription
#=> $fieldDescription[[1]]
#=> NULL

データフレームの取得、挿入

R のデータフレームはリレーショナルデータベースと似た構造になっているので、write.table, read.table のようなノリで読み込み、書き込みを行うことができます。

library(RSQLite)
driver=dbDriver("SQLite")
dbname="test.db"
con=dbConnect(driver,dbname)
test.tbl=as.data.frame(matrix(rnorm(100),nc=2))
colnames(test.tbl)=c("random1","random2")

# データフレームをテーブルとして一括書き込み
rs=dbWriteTable(con,"random",test.tbl,row.names=F)

# 書き込めているかテスト
dbGetQuery(con,"SELECT * FROM random limit 5;")

#=>   row_names    random1    random2
#=> 1         1  0.2354093  1.7083581
#=> 2         2 -0.8101699 -0.6867071
#=> 3         3  0.4537572  1.8399874
#=> 4         4 -2.1129855  1.0211205
#=> 5         5  0.9778609 -0.9177596

# テーブルをデータフレームとして一括取得
dbReadTable(con,"random")

(注意) マニュアルによれば dbReadTable, dbWriteTable はトランザクションを利用しないようです。

続きを書きました。

はてなブックマーク - [R] RSQLite の使い方 (1)
Pocket