A R convenience layer for CouchDB. R4CouchDB unites RCurl and RJSONIO and implements the CouchDB API.



R4CouchDB is part of the cran cosmos so the package can be installed by:

R> install.packages("R4CouchDB")



The example presumes a running CouchDB on http://localhost:5984. The plan is to store some data to a CouchDB document get it back and make a plot (some eye candy) out of it.

At first load the R4CouchDB package as usual:

R> library("R4CouchDB")

Then we generate the connection or interface list (here assigned to the variable cdb) by:

R> cdb <- cdbIni()

cdb makes some default assumptions such as:

R> cdb$serverName
[1] "localhost"


R> cdb$port
[1] "5984"

Now straight forward: we make a database http://localhost:5984/r-example, load some fancy volcano data, and write the data (plus some demo info) to a new database document:

R> cdb$newDBName <- "r-example"
R> cdb           <- cdbMakeDB(cdb)
R> data(volcano)
R> rdoc <- list(date = date(), 
                data = volcano, 
                dim  = dim(volcano))
R> cdb$dataList  <- rdoc
R> res           <- cdbAddDoc(cdb)$res
R> res
[1] TRUE
[1] "26659bf9e39fb9ad6278325963643246"
[1] "1-44e4052a2ef00a8574cad2210e1cfc8e"

We now make the plot of the volcano with the data from the database. Getting back the data is done with:

R> cdb$id           <- res$id
R> cdoc             <- cdbGetDoc(cdb)$res

regenerate the volcano matrix from the result of the database query (cdoc) by:

R> mat <- matrix(data = t(unlist( cdoc$data )), 
                 nrow = cdoc$dim[[2]],  
                 ncol = cdoc$dim[[1]])

and here we are:

R> png("r-example.png")
R> persp(mat, 
         theta = 120,
         phi   = 30, 
         col   = "green3",
         shade = 0.75 )
R> dev.off()

Finally we can store the diagram as png in the database document as an attachment by:

R> cdb$fileName <- "r-example.png"
R> cdbAddAttachment(cdb)$res
[1] TRUE
[1] "26659bf9e39fb9ad6278325963643246"
[1] "2-02eeabde33aaafc8c6d270203fd0dba7"






An easy interface to CouchDB from R. Targeted at CouchDB v2+, but much of the package should work with older versions.




R> install.packages("sofa")


 Load the package
R> library('sofa')
Make a client
R> client <- Cushion$new()
R> client
<sofa - cushion> 
  transport: http
  port: 5984
Ping the server
R> ping(client)
[1] "Welcome"

[1] "2.0.0"

[1] "The Apache Software Foundation"
Create a new database
R> db_create(client, dbname = 'cats')
[1] TRUE
List your databases
R> db_list(client)
[1] "cats"
Create a document
R> doc1 <- '{"name":"leo", "type":"cat", "color": "red"}'
R> doc_create(client, doc1, dbname = "cats", docid = "doc1")
[1] TRUE

[1] "doc1"

[1] "1-a48c98c945bcc05d482bc6f938c89882"
Query the database

Return all cats that are red

R> db_query(client, dbname = "cats", selector = list(color = "red"))$docs
[1] "e6bb43092edaf8fd987434b8a30cfbdf"

[1] "1-08aef850a23f5ff95869c9cf5d9604dc"

[1] "leo"

[1] "red"

[1] "cat"
Bulk create documents

Create documents in bulk from a data.frame, list, or JSON as a character string.

R> db_create(client, dbname = "bulktest")
R> db_bulk_create(client, dbname = "bulktest", mtcars)