File: saveDataFrameFactor.R

package info (click to toggle)
r-bioc-alabaster.base 1.6.1%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 1,652 kB
  • sloc: cpp: 11,377; sh: 29; makefile: 2
file content (90 lines) | stat: -rw-r--r-- 2,899 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#' Stage a DataFrameFactor object
#'
#' Stage a \linkS4class{DataFrameFactor} object, a generalization of the base factor for \linkS4class{DataFrame} levels.
#'
#' @param x A \linkS4class{DataFrameFactor} object.
#' @inheritParams saveObject 
#' @param ... Further arguments, to pass to internal \code{\link{altSaveObject}} calls.
#'
#' @return 
#' \code{x} is saved to an on-disk representation inside \code{path}.
#' 
#' @author Aaron Lun
#' @examples
#' library(S4Vectors)
#' df <- DataFrame(X=LETTERS[1:5], Y=1:5)
#' out <- DataFrameFactor(df[sample(5, 100, replace=TRUE),,drop=FALSE])
#' 
#' tmp <- tempfile()
#' saveObject(out, tmp)
#' list.files(tmp, recursive=TRUE)
#'
#' @export
#' @rdname saveDataFrameFactor
#' @aliases stageObject,DataFrameFactor-method
setMethod("saveObject", "DataFrameFactor", function(x, path, ...) {
    dir.create(path)
    ofile <- file.path(path, "contents.h5")

    fhandle <- H5Fcreate(ofile, "H5F_ACC_TRUNC")
    on.exit(H5Fclose(fhandle), add=TRUE, after=FALSE)
    ghandle <- H5Gcreate(fhandle, "data_frame_factor")
    on.exit(H5Gclose(ghandle), add=TRUE, after=FALSE)

    .simple_save_codes(ghandle, x)
    stuff <- levels(x)
    altSaveObject(stuff, file.path(path, "levels"), ...)

    saveMetadata(x, 
        mcols.path=file.path(path, "element_annotations"),
        metadata.path=file.path(path, "other_annotations"),
        ...
    )

    saveObjectFile(path, "data_frame_factor", list(data_frame_factor=list(version="1.0")))
})

.anyDuplicated_fallback <- function(path, ...) {
    anyDuplicated(readObject(path, ...))
}

#######################################
########### OLD STUFF HERE ############
#######################################

#' @export
#' @importFrom utils write.csv
setMethod("stageObject", "DataFrameFactor", function(x, dir, path, child=FALSE, index.name="index", level.name="levels", mcols.name="mcols") {
    dir.create(file.path(dir, path))
    stuff <- levels(x)

    lev.info <- tryCatch({
        info <- altStageObject(stuff, dir, paste0(path, "/", level.name), child=TRUE)
        writeMetadata(info, dir)
    }, error=function(e) stop("failed to stage underlying DataFrame in a DataFrameFactor\n  - ", e$message))

    path2 <- paste0(path, "/", index.name)
    ofile <- file.path(dir, path2)
    rd <- data.frame(index=as.integer(x))
    if (!is.null(names(x))){ 
        rd <- cbind(row_names=names(x), rd)
    }
    .quickWriteCsv(rd, path=ofile, compression="gzip", row.names=FALSE)

    element_data <- .processMcols(x, dir, path, mcols.name) 

    list(
        `$schema`="data_frame_factor/v1.json",
        path=path2,
        is_child=child,
        factor=list(
            length=length(x),
            names=!is.null(names(x)),
            element_data=element_data,
            compression="gzip"
        ),
        data_frame_factor=list(
            levels=list(resource=lev.info)
        )
    )
})