[R] Code works standalone, yet same code fails when part of package
Martin Morgan
mtmorgan at fhcrc.org
Tue Dec 18 00:45:12 CET 2012
Hi Mick --
On 12/17/2012 02:01 PM, WATSON Mick wrote:
> Hi
>
> 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!
>
> Mick
>
>> 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,]
> }
> }
>
> return(as.data.frame(df))
> }
>> 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â:
>
> translate
>
> Loading required package: plyr
>
> Attaching package: âplyrâ
>
> The following object(s) are masked from âpackage:seqinrâ:
>
> count
>
> 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, ]
> }
> }
> return(as.data.frame(df))
> }
> <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
Glad to see you using the Bioconductor GenomicRanges infrastructure; you might
get excellent help on one of the Bioconductor mailing lists
http://bioconductor.org/help/mailing-list/
But the issue here is that your package needs to have Imports: IRanges in it's
DESCRIPTION file, and something like
importMethodsFrom(IRanges, coerce)
in its NAMESPACE file. Otherwise, the method to coerce a DataFrame to a
data.frame are not available to your package code.
Martin
>
> data.frame
>
> R version 2.15.2 (2012-10-26)
> Platform: x86_64-redhat-linux-gnu (64-bit)
>
> locale:
> [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
> [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
> [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
> [7] LC_PAPER=C LC_NAME=C
> [9] LC_ADDRESS=C LC_TELEPHONE=C
> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=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
>
--
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109
Location: Arnold Building M1 B861
Phone: (206) 667-2793
More information about the R-help
mailing list