R 言語処理系のオブジェクトを MongoDB に格納してみる
このWebページでは、
R のデータ・フレームを MongoDB に格納してみます。
前準備
MongoDB のインストール
MongoDB は,ドキュメントデータモデルの機能をもつデータベース管理システム
R システムのインストール
R システムは,統計計算とグラフィックスのソフトウェアで,多数の機能を持つ.R システムの CRAN の URL: https://cran.r-project.org/
必要な R パッケージのインストール
- R の起動
R
- R パッケージのインストール
install.packages("rmongodb") install.packages("rjson")
使ってみる
データフレームの格納 (toJSON, fromJSON を使用する)
2つのラッパー insertMongo, getMongo を定義し、 このラッパーを使って、データフレームの mongodb への格納と取り出しを行なってみます
ここでは、toJSON, fromJSON という2つの関数を使って JSON との変換を行なっています.
library("rmongodb")
library("rjson")
insertMongo <- function(mongo, ns, key, val) {
if (mongo.is.connected(mongo)) {
a <- mongo.insert(mongo, ns, list(name=key, value=toJSON(val)))
return(a)
}
}
getMongo <- function(mongo, ns, key) {
if (mongo.is.connected(mongo)) {
x <- mongo.find.one(mongo, ns, list(name=key))
return(fromJSON(mongo.bson.to.list(x)$value))
}
return(NULL)
}
m <- mongo.create(host="127.0.0.1")
mongo.get.databases(m)
mongo.get.database.collections(m, db="hoge")
#
insertMongo(m, "hoge.iris", "iris", iris)
getMongo(m, "hoge.iris", "iris")
注意点としては、 元のテーブルが Factor (因子) を含むとき、mongodb に格納したあと、読み込むと、Factor (因子)の部分が文字列になる.
str(getMongo(m, "hoge.iris", "iris") )
str(iris)

(参考)データフレームの格納 (toJSON, fromJSON を使用しない)
今後は、 toJSON, fromJSON を使用しないように、 2つのラッパー insertMongo, getMongo を定義してみます。
library("rmongodb")
library("rjson")
insertMongo <- function(mongo, ns, key, val) {
if (mongo.is.connected(mongo)) {
a <- mongo.insert(mongo, ns, list(name=key, value=val))
return(a)
}
}
getMongo <- function(mongo, ns, key) {
if (mongo.is.connected(mongo)) {
x <- mongo.find.one(mongo, ns, list(name=key))
return(mongo.bson.to.list(x)$value)
}
return(NULL)
}
m <- mongo.create(host="127.0.0.1")
mongo.get.databases(m)
mongo.get.database.collections(m, db="hoge2")
#
insertMongo(m, "hoge2.iris", "iris", iris)
getMongo(m, "hoge2.iris", "iris")
今度は、 元のテーブルが Factor (因子) を含むとき、mongodb に格納したあと、読み込むと、Factor (因子)の部分が数値になる.(こちらの方が不便かなという気がします)。
