Hi, Herve, Martin,

Thanks! I've changed the function to use IntegerList instead of list in the 
branch, although at the moment it still fails at the same place. 

Should I switch entirely to a devel R and bioc whilst I work on my package? You 
said 'during the current release cycle that means using the devel version on 
R', does this mean it switches and sometimes release R should be used?

Many thanks,
Ben.
________________________________________
From: Hervé Pagès [[email protected]]
Sent: 14 January 2016 03:28
To: Morgan, Martin; Ben Ward (TGAC); [email protected]
Subject: Re: [Bioc-devel] IRanges - PartitioningByEnd not found when package 
method runs.

Hi Ben, Martin,

On 01/13/2016 08:19 AM, Morgan, Martin wrote:
> Hi Ben -- nice to see you over here ;)
>
> You're using the release version of R (R-3.2.3) and presumably release 
> versions of packages (my advice on placing sessionInfo() was a little too 
> clever; you want your package loaded, so the versions of it's dependencies 
> are apparent, so in a separate R maybe library(testRpkg); sessionInfo(); I'll 
> update my support site post...).
>
> At least for Bioconductor packages, you want to be using the 'devel' version 
> of Bioconductor, and during the current release cycle that means the devel 
> version of R.
>
> Nonetheless, I started R-release, loaded the test package, ran the function, 
> and looked at traceback()
>
>> library(testRpkg)
>> doit()
> Error in end(PartitioningByEnd(x)) :
>    error in evaluating the argument 'x' in selecting a method for function 
> 'end': Error: could not find function "PartitioningByEnd"
>> traceback()
> 9: end(PartitioningByEnd(x))
> 8: .unlist_NL_subscript(i, x)
> 7: fast_path_FUN(x, i)
> 6: subset_List_by_List(x, i)
> 5: object[index]
> 4: object[index]
> 3: subsetSites(dna, 1:50)
> 2: subsetSites(dna, 1:50)
> 1: doit()
>
> The suspect looks like .unlist_NL_subscript, so I went looking for it
>
>> getAnywhere(.unlist_NL_subscript)
> A single object matching '.unlist_NL_subscript' was found
> It was found in the following places
>    namespace:S4Vectors
> with value
>
> function (i, x)
> {
>      offsets <- c(0L, end(PartitioningByEnd(x))[-length(x)])
>      i <- i + offsets
>      unlist(i, use.names = FALSE)
> }
> <environment: namespace:S4Vectors>
>
> So S4Vectors wants to use PartitioningByEnd. I looked at it's NAMESPACE 
> imports (actually I looked in the SVN repository...) for the packages it 
> imports from...
>
>> names(getNamespaceImports("S4Vectors"))
> [1] "base"         "methods"      "utils"        "stats"        "stats4"
> [6] "BiocGenerics"
>
> and find that it does not import IRanges. So the problem is a bug in 
> S4Vectors.
>
> I don't see the problem in bioc-devel, and to see why I had to be a bit 
> clever -- there is no error, so no opportunity to use traceback(). Instead, I 
> used the advanced-but-flexible 'trace' function to set a tracer on 
> PartioningByEnd, where the tracer is the 'recover' function...
>
>> trace(IRanges::PartitioningByEnd, tracer=recover)
>
> So when PartioningByEnd is evalutated, R will get me the 'recover' prompt...
>> doit()
> Tracing IRanges::PartitioningByEnd(x) on entry
>
> Enter a frame number, or 0 to exit
>
>   1: doit()
>   2: subsetSites(dna, 1:50)
>   3: subsetSites(dna, 1:50)
>   4: object[index]
>   5: object[index]
>   6: subset_List_by_List(x, i)
>   7: fast_path_FUN(x, i)
>   8: .unlist_NL_subscript(i, x)
>   9: end(IRanges::PartitioningByEnd(x))
> 10: IRanges::PartitioningByEnd(x)
>
> Selection:
>
> This shows me the call stack (looks almost identical, so I could have 
> 'guessed' that I wanted to look at .unlist_NL_subscript again) and suggests 
> that the code has been fixed to explicitly indicate where PartitioningByEnd 
> comes from. This is confirmed by looking at the code definition
>
>> getAnywhere(".unlist_NL_subscript")
> A single object matching '.unlist_NL_subscript' was found
> It was found in the following places
>    namespace:S4Vectors
> with value
>
> function (i, x)
> {
>      offsets <- c(0L, end(IRanges::PartitioningByEnd(x))[-length(x)])
>      i <- i + offsets
>      unlist(i, use.names = FALSE)
> }
> <environment: namespace:S4Vectors>
>
> So this is a bug in S4Vectors, but fixed in Bioc-devel where new package 
> development should be occurring.
>
> I'll leave it to Herve or others to decide whether S4Vectors in release 
> should be patched.

Michael fixed this in devel. Thanks Michael! I should probably backport
the fix to release.

@Ben: FWIW subsetting with an IntegerList subscript is much more
efficient than with an ordinary list:

     index <- rep.int(IntegerList(index), length(object))
     object[index]

It will make a big difference (e.g. 100x faster or more) if 'object' is
a DNAStringSet with tens of thousands of sequences.

Cheers,
H.

>
> Thanks for the bug report!
>
> Martin
> ________________________________________
> From: Bioc-devel [[email protected]] on behalf of Ben Ward 
> (TGAC) [[email protected]]
> Sent: Wednesday, January 13, 2016 10:57 AM
> To: [email protected]
> Subject: [Bioc-devel] IRanges - PartitioningByEnd not found when package      
>   method runs.
>
> Hi All,
>
> I am having an issue with an un-exported method in a package I am developing, 
> the package imports Biostrings and IRanges.
>
> I have created a minimal, reproducible example, (many many thanks to Martin 
> Morgan for telling me how to do this) in this repo branch: 
> https://github.com/Ward9250/testRpkg/tree/PartByEnd
>
> The method, as you will see from the branch, is called subsetSites, and is 
> supposed to cut a DNAString set down to only the sites/base positions 
> indicated by a provided vector of integers. It does this by indexing the 
> DNAStringSet with re.int.
>
> If I try to run this however, it seems to fail, indicating that it cannot 
> find the PartitioningByEnd function. This puzzles me as I know the function 
> is part of IRanges, which is imported in the package, and I would assume 
> Biostrings would import any IRanges functionality it needed for the 
> DNAStringSet indexing operator.
>
> Below is an example run of what I see, and my session info.
>
> If anyone can see what my issue is or knows how to solve this it would be a 
> big help.
>
> Many Thanks,
> Ben W.
>
>
> bward@n78620:/tmp$ git clone [email protected]:ward9250/testRpkg.git -b 
> PartByEnd
> Cloning into 'testRpkg'...
> remote: Counting objects: 18, done.
> remote: Compressing objects: 100% (10/10), done.
> remote: Total 18 (delta 1), reused 18 (delta 1), pack-reused 0
> Receiving objects: 100% (18/18), done.
> Resolving deltas: 100% (1/1), done.
> Checking connectivity... done.
> bward@n78620:/tmp$ cd testRpkg
> bward@n78620:/tmp/testRpkg$ R CMD INSTALL .
> * installing to library 
> �/usr/users/TGAC_ga002/bward/R/x86_64-pc-linux-gnu-library/3.2�
> * installing *source* package �testRpkg� ...
> ** R
> ** preparing package for lazy loading
> ** help
> No man pages found in package  �testRpkg�
> *** installing help indices
> ** building package indices
> ** testing if installed package can be loaded
> * DONE (testRpkg)
> bward@n78620:/tmp/testRpkg$ R --vanilla -e "sessionInfo(); testRpkg::doit()"
> R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree"
> Copyright (C) 2015 The R Foundation for Statistical Computing
> Platform: x86_64-pc-linux-gnu (64-bit)
>
> R is free software and comes with ABSOLUTELY NO WARRANTY.
> You are welcome to redistribute it under certain conditions.
> Type 'license()' or 'licence()' for distribution details.
>
>    Natural language support but running in an English locale
>
> R is a collaborative project with many contributors.
> Type 'contributors()' for more information and
> 'citation()' on how to cite R or R packages in publications.
>
> Type 'demo()' for some demos, 'help()' for on-line help, or
> 'help.start()' for an HTML browser interface to help.
> Type 'q()' to quit R.
>
>> sessionInfo(); testRpkg::doit()
> R version 3.2.3 (2015-12-10)
> Platform: x86_64-pc-linux-gnu (64-bit)
> Running under: Ubuntu 14.04.3 LTS
>
> locale:
>   [1] LC_CTYPE=en_GB.UTF-8       LC_NUMERIC=C
>   [3] LC_TIME=en_GB.UTF-8        LC_COLLATE=en_GB.UTF-8
>   [5] LC_MONETARY=en_GB.UTF-8    LC_MESSAGES=en_GB.UTF-8
>   [7] LC_PAPER=en_GB.UTF-8       LC_NAME=C
>   [9] LC_ADDRESS=C               LC_TELEPHONE=C
> [11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
>
> attached base packages:
> [1] stats     graphics  grDevices utils     datasets  methods   base
> Error in end(PartitioningByEnd(x)) :
>    error in evaluating the argument 'x' in selecting a method for function 
> 'end': Error: could not find function "PartitioningByEnd"
> Calls: <Anonymous> ... subset_List_by_List -> fast_path_FUN -> 
> .unlist_NL_subscript -> end
> Execution halted
>
>
>
>          [[alternative HTML version deleted]]
>
>
> This email message may contain legally privileged and/or confidential 
> information.  If you are not the intended recipient(s), or the employee or 
> agent responsible for the delivery of this message to the intended 
> recipient(s), you are hereby notified that any disclosure, copying, 
> distribution, or use of this email message is prohibited.  If you have 
> received this message in error, please notify the sender immediately by 
> e-mail and delete this email message from your computer. Thank you.
> _______________________________________________
> [email protected] mailing list
> https://stat.ethz.ch/mailman/listinfo/bioc-devel
>

--
Hervé Pagès

Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M1-B514
P.O. Box 19024
Seattle, WA 98109-1024

E-mail: [email protected]
Phone:  (206) 667-5791
Fax:    (206) 667-1319
_______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/bioc-devel

Reply via email to