[R] Code works standalone, yet same code fails when part of package

WATSON Mick mick.watson at roslin.ed.ac.uk
Mon Dec 17 23:01:22 CET 2012


I'm missing something here but I cannot figure out what.  What I can see is that the same code works when I load it via source(...) yet fails when I execute it after loading the package I have built (which includes the code.

Below is a transcript of my R session.  First I load the code from a file, using source().  Then I execute it fine.  Then I remove the function object, I load the package, and execute the same code from the package - and I get an error.

Please help!


> library(Rsamtools)
> source("viRome/R/read.bam.R")
> read.bam
function(bamfile=NULL, chr=NULL, start=1, end=1e07, what=c("qname",  "flag",   
"rname",  "strand", "pos",    "qwidth", "mapq",   "cigar",  "mrnm",   "mpos",   
"isize", "seq"), tag=c("NM"), removeN=TRUE) {

        which <- RangesList(chr = IRanges(start,end))
        names(which) <- chr
        param <- ScanBamParam(which = which, what = what, tag=tag)

        bam <- scanBam(bamfile, param=param)

        lst <- lapply(names(bam[[1]]), function(elt) {do.call(c, unname(lapply

(bam, "[[", elt)))})
        names(lst) <- names(bam[[1]])

        # convert to data.frame
        df <- do.call("DataFrame", lst)
        df <- df[!is.na(df$qwidth),]

        df$seq <- as.character(df$seq)
        df$cigar <- as.character(df$cigar)

        df$rname <- rep(chr, nrow(df))

        if (removeN==TRUE) {
                ns <- grep("N", df$seq)
                if (length(ns) > 0) {
                        df <- df[-ns,]

> bam <- read.bam("../../example/SRR389185_vs_SINV_sorted.bam", chr="SINV")
> # works!  remove the function
> rm(read.bam)
> # load the package
> library(viRome)
Loading required package: seqinr

Attaching package: âseqinrâ

The following object(s) are masked from âpackage:Biostringsâ:


Loading required package: plyr

Attaching package: âplyrâ

The following object(s) are masked from âpackage:seqinrâ:


The following object(s) are masked from âpackage:IRangesâ:

    compact, desc, rename

Loading required package: gsubfn
Loading required package: proto
Loading required namespace: tcltk
Loading Tcl/Tk interface ... done
Loading required package: seqLogo
Loading required package: grid
> read.bam
function (bamfile = NULL, chr = NULL, start = 1, end = 1e+07,
    what = c("qname", "flag", "rname", "strand", "pos", "qwidth",
        "mapq", "cigar", "mrnm", "mpos", "isize", "seq"), tag = c("NM"),
    removeN = TRUE)
    which <- RangesList(chr = IRanges(start, end))
    names(which) <- chr
    param <- ScanBamParam(which = which, what = what, tag = tag)
    bam <- scanBam(bamfile, param = param)
    lst <- lapply(names(bam[[1]]), function(elt) {
        do.call(c, unname(lapply(bam, "[[", elt)))
    names(lst) <- names(bam[[1]])
    df <- do.call("DataFrame", lst)
    df <- df[!is.na(df$qwidth), ]
    df$seq <- as.character(df$seq)
    df$cigar <- as.character(df$cigar)
    df$rname <- rep(chr, nrow(df))
    if (removeN == TRUE) {
        ns <- grep("N", df$seq)
        if (length(ns) > 0) {
            df <- df[-ns, ]
<environment: namespace:viRome>
> # same code now produces an error
> bam <- read.bam("../../example/SRR389185_vs_SINV_sorted.bam", chr="SINV")
Error in as.data.frame.default(df) :
  cannot coerce class 'structure("DataFrame", package = "IRanges")' into a 


R version 2.15.2 (2012-10-26)
Platform: x86_64-redhat-linux-gnu (64-bit)

 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
 [7] LC_PAPER=C                 LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods
[8] base

other attached packages:
 [1] viRome_0.2           seqLogo_1.24.0       gsubfn_0.6-5
 [4] proto_0.3-9.2        plyr_1.8             seqinr_3.0-7
 [7] Rsamtools_1.10.2     Biostrings_2.26.2    GenomicRanges_1.10.5
[10] IRanges_1.16.4       BiocGenerics_0.4.0

loaded via a namespace (and not attached):
[1] bitops_1.0-5    parallel_2.15.2 stats4_2.15.2   tcltk_2.15.2
[5] zlibbioc_1.4.0

The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.

More information about the R-help mailing list