金子邦彦研究室プログラミングR のプログラム例R 言語処理系のオブジェクトを MongoDB に格納してみる

R 言語処理系のオブジェクトを MongoDB に格納してみる

このWebページでは、 R のデータ・フレームを MongoDB に格納してみます。

前準備

MongoDB のインストール

MongoDB は,ドキュメントデータモデルの機能をもつデータベース管理システム

R システムのインストール

R システムは,統計計算とグラフィックスのソフトウェアで,多数の機能を持つ.

R システムの CRAN の URL: https://cran.r-project.org/

必要な R パッケージのインストール

  1. R の起動

    R 
    
  2. 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) 

[image]

(参考)データフレームの格納 (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 (因子)の部分が数値になる.(こちらの方が不便かなという気がします)。

[image]