The BiocIO
package is primarily to be used by developers for interfacing with
the abstract classes and generics in this package to devlop their own related
classes and methods.
if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager") BiocManager::install("BiocIO")
library("BiocIO")
The functions import and export load and save objects from and to particular file formats. This package contains the following generics for the import and export methods used throughout the Bioconductor package suite.
getGeneric("import") getGeneric("export")
BiocFile is a base class for high-level file abstractions, where subclasses are associated with a particular file format/type. It wraps a low-level representation of a file, currently either a path/URL or connection.
CompressedFile is a base class that extends the BiocFile class that offers high-level file abstractions for compressed file formats. As with the BiocFile class, it takes either a path/URL of connection as an arguement. This package also includes other File classes that extend CompressedFile including: BZ2File, XZFile, GZFile, and BGZFile which extends the GZfile class
As of the current release, the rtracklayer
package's RTLFile
, RTLList
,
and CompressedFile
classes are throwing the following error when a class
that extends them is initialized. The error can currently be seen with the
LoomFile
class from LoomExperiment.
file <- tempfile(fileext = ".loom") LoomFile(file) ### LoomFile object ### resource: file.loom ### Warning messages: ### 1: This class is extending the deprecated RTLFile class from ### rtracklayer. Use BiocFile from BiocIO in place of RTLFile. ### 2: Use BiocIO::resource()
The first warning indicates the the RTLFile
class from rtracklayer
is
being depricated in future releases. The second waning indicates that the
resource
method from rtracklayer
has also been moved to BiocIO
.
To resolve this issue, simply replace the contains="RTLFile"
argument in
setClass
with contains="BiocFile"
.
## Old setClass('LoomFile', contains='RTLFile') ## New setClass('LoomFile', contains='BiocFile')
The primary purpose of this package is to provide high-level classes and generics to facilitate file IO within the Biocondcutor package suite. The remainder of this vignette will detail how to create File classes that extend the BiocFile class and create methods for these classes. This section will also detail using the filter and select methods from the tidyverse dplyr package to facilitate lazy operations on files.
The CSVFile class defined in this package will be used as an example. The
purpose of the CSVFile class is to represent CSVFile so that IO operations can
be performed on the file. The following code defines the CSVFile class that
extends the BiocFile class using the contains
argument. The CSVFile function
is used as a constructor function requiring only the argument resource
(either
a character
or a connection
).
.CSVFile <- setClass("CSVFile", contains = "BiocFile") CSVFile <- function(resource) { .CSVFile(resource = resource) }
Next, the import and export functions are defined. These functions are meant to
import the data into R in a usable format (a data.frame
or another
user-friendly R class), then export that R object into a file. For the CSVFile
example, the base read.csv()
and write.csv()
functions are used as the body
for our methods.
setMethod("import", "CSVFile", function(con, format, text, ...) { read.csv(resource(con), ...) }) setMethod("export", c("data.frame", "CSVFile"), function(object, con, format, ...) { write.csv(object, resource(con), ...) })
And finally a demonstration of the CSVFile class and import/export methods in action.
temp <- tempfile(fileext = ".csv") csv <- CSVFile(temp) export(mtcars, csv) df <- import(csv)
sessionInfo()
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.