Re-export validateLoom and start create function
authorPaul Hoffman <phoffman@nygenome.org>
Fri, 27 Oct 2017 20:40:04 +0000 (16:40 -0400)
committerPaul Hoffman <phoffman@nygenome.org>
Fri, 27 Oct 2017 20:40:04 +0000 (16:40 -0400)
NAMESPACE
R/loom.R
man/create.Rd [new file with mode: 0644]

index a393e15531d49713a39cef4ccd29e968437f5549..00c41b3e7479e2fb52f13f895619390a00845a75 100644 (file)
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -2,5 +2,7 @@
 
 export(connect)
 export(loom)
+export(validateLoom)
 import(hdf5r)
 importFrom(R6,R6Class)
+importFrom(utils,packageVersion)
index bd380b211b8f1c5cec4f23ffdc84613abedbd214..076e7cab65748e7ccd6f703da35d9f0d41f54c81 100644 (file)
--- a/R/loom.R
+++ b/R/loom.R
@@ -10,6 +10,8 @@ NULL
 #' @return Object of class \code{\link{loom}}
 #' @seealso \code{\link{hdf5r::H5File}}
 #'
+#' @importFrom utils packageVersion
+#'
 #' @export
 #'
 loom <- R6Class(
@@ -21,6 +23,8 @@ loom <- R6Class(
   public = list(
     # Fields
     version = NULL,
+    shape = NULL,
+    chunksize = NULL,
     # Methods
     initialize = function(
       filename = NULL,
@@ -29,16 +33,44 @@ loom <- R6Class(
     ) {
       do.validate <- file.exists(filename)
       super$initialize(filename = filename, mode = mode, ...)
-      # if (do.validate) {
-      #   validateLoom(object = self)
-      # } else {
-      #   # self$version <- packageVersion(pkg = 'loom')
-      #   print()
-      # }
+      if (do.validate) {
+        validateLoom(object = self)
+        self$shape <- self[['matrix']]$dims
+        chunks <- h5attr(x = self, which = 'chunks')
+        chunks <- gsub(pattern = '(', replacement = '', x = chunks, fixed = TRUE)
+        chunks <- gsub(pattern = ')', replacement = '', x = chunks, fixed = TRUE)
+        chunks <- unlist(x = strsplit(x = chunks, split = ','))
+        self$chunks <- as.integer(x = chunks)
+        self$version <- as.character(x = tryCatch(
+          expr = h5attr(x = self, which = 'version'),
+          error = function(e) packageVersion(pkg = 'loomR')
+        ))
+      } else {
+        # self$version <- packageVersion(pkg = 'loomR')
+        print()
+      }
     }
   )
 )
 
+#' Create a loom object
+#'
+#' @param filename ...
+#' @param data ...
+#' @param row.attrs ...
+#' @param col.attrs ...
+#'
+#' @return A connection to a loom file
+#'
+#' @seealso \code{\link{loom-class}}
+#'
+create <- function(filename, data, row.attrs, col.attrs) {
+  if (file.exists(filename)) {
+    stop(paste('File', file, 'already exists!'))
+  }
+  new.loom <- loom$new(filename = filename, mode = 'r')
+}
+
 # #' @importFrom utils packageVersion
 # #'
 # setMethod(
@@ -65,6 +97,8 @@ loom <- R6Class(
 #'
 #' @return None, errors if object is an invalid loom object
 #'
+#' @export
+#'
 validateLoom <- function(object) {
   # A loom file is a specific HDF5
   # We need a dataset in /matrix that's a two-dimensional dense matrix
diff --git a/man/create.Rd b/man/create.Rd
new file mode 100644 (file)
index 0000000..b2a5394
--- /dev/null
@@ -0,0 +1,26 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/loom.R
+\name{create}
+\alias{create}
+\title{Create a loom object}
+\usage{
+create(filename, data, row.attributes, col.attributes)
+}
+\arguments{
+\item{filename}{...}
+
+\item{data}{...}
+
+\item{row.attributes}{...}
+
+\item{col.attributes}{...}
+}
+\value{
+A connection to a loom file
+}
+\description{
+Create a loom object
+}
+\seealso{
+\code{\link{loom-class}}
+}