Change validation to add missing groups; update documentation
authorPaul Hoffman <phoffman@nygenome.org>
Thu, 22 Feb 2018 23:21:43 +0000 (18:21 -0500)
committerPaul Hoffman <phoffman@nygenome.org>
Thu, 22 Feb 2018 23:21:43 +0000 (18:21 -0500)
R/internal.R
R/loom.R
man/connect.Rd

index ccd997749775740a9885374b4f4ce4a1007a832f..4f590f7f3daf245f44051b1dcef20250f25668df 100644 (file)
@@ -70,8 +70,27 @@ validateLoom <- function(object) {
     paste(required.groups, collapse = "', '"),
     "'"
   )
-  if (length(x = root.groups) != length(x = required.groups)) {
+  reopen.msg <- paste(
+    group.msg,
+    "Reopen in 'r+' mode to automatically add missing groups",
+    sep = '\n'
+  )
+  if (length(x = root.groups) > length(x = required.groups)) {
     stop(group.msg)
+  } else if (length(x = root.groups) < length(x = required.groups)) {
+    if (all(root.groups %in% required.groups)) {
+      if (object$mode != 'r') {
+        missing.groups <- required.groups[!(required.groups %in% root.groups)]
+        for (group in missing.groups) {
+          object$create_group(name = group)
+        }
+        root.groups <- list.groups(object = object, path = '/', recursive = FALSE)
+      } else {
+        stop(reopen.msg)
+      }
+    } else {
+      stop(group.msg)
+    }
   }
   if (!all(required.groups %in% root.groups)) {
     stop(group.msg)
index f4e0c20412c99766a3e0057229de03b2de3ec197..568511fe10c378563ad2b0fbdb09d3b114581172 100644 (file)
--- a/R/loom.R
+++ b/R/loom.R
@@ -1105,7 +1105,8 @@ create <- function(
 #' Connect to a loom file
 #'
 #' @param filename The loom file to connect to
-#' @param mode How do we connect to it? Pass 'r' for read-only or 'r+' for read/write
+#' @param mode How do we connect to it? Pass 'r' for read-only or 'r+' for read/write.
+#' If \code{mode} is 'r+', loomR will automatically add missing required groups during validation
 #' @param skip.validate Skip the validation steps, use only for extremely large loom files
 #'
 #' @return A loom file connection
index 966b952088bd01be452d15f1f5ad87c8677d7359..6d4df0e0475af000a16ab3250055ff5f7ea2117e 100644 (file)
@@ -9,7 +9,8 @@ connect(filename, mode = "r", skip.validate = FALSE)
 \arguments{
 \item{filename}{The loom file to connect to}
 
-\item{mode}{How do we connect to it? Pass 'r' for read-only or 'r+' for read/write}
+\item{mode}{How do we connect to it? Pass 'r' for read-only or 'r+' for read/write.
+If \code{mode} is 'r+', loomR will automatically add missing required groups during validation}
 
 \item{skip.validate}{Skip the validation steps, use only for extremely large loom files}
 }