Hi Thibaut --
On 05/21/2010 08:34 AM, Jombart, Thibaut wrote:
> Dear R developers,
>
> I am having a slightly weird issue with a S4 method defined in my package
> adegenet 1.2-4, with R 2.11.0. As far as I know, the problem is new, and the
> code implementing the method has not changed for more than a year and worked
> well so far.
>
> The problem is the following. I define, in the package, a method "[" for the
> S4 class 'genind'. The method's definition is:
> setMethod("[", signature(x="genind", i="ANY", j="ANY", drop="ANY"),
> function(x, i, j, ..., loc=NULL, treatOther=TRUE, drop=FALSE) {
> ... ## code of the function
> })
>
> When sourcing the code directly from R, this method is found and used
> normally. However, when loading the package, the method does not seem to be
> "found" any longer by the dispatcher. For instance, here is an error I get:
> ### R code
>> library(adegenet)
>> data(nancycats) # nancycat is a S4 object with class 'genind'
>> class(nancycats)
> [1] "genind"
> attr(,"package")
> [1] "adegenet"
>> nancycats[1]
> Error in nancycats[1] : object of type 'S4' is not subsettable # "[" IS NOT
> USED HERE
> ### end R code
For what it's worth, I can't reproduce this problem, and in a new R
session after library(adegenet) I have
> sessionInfo()
R version 2.11.0 Patched (2010-05-01 r51886)
x86_64-unknown-linux-gnu
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=C LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices datasets utils methods base
other attached packages:
[1] adegenet_1.2-4 MASS_7.3-5
which has a different set of attached / loaded packages -- maybe you are
picking up something from .RData or .Rprofile, and you need to start R
with --vanilla?
Martin
>
> And still, the method is defined in the environment:
> ### R code
>> showMethods("[", class="genind")
> Function: [ (package base)
> x="genind"
>
>> findMethods("[", classes="genind")$genind
> Method Definition:
>
> function (x, i, j, ..., drop = FALSE)
> {
> .local <- function (x, i, j, ..., loc = NULL, treatOther = TRUE,
> drop = FALSE)
> {
> if (missing(i))
> i <- TRUE
> if (missing(j))
> j <- TRUE
> pop <- NULL
>
> ... # rest of the code of the function
> ### end R code
>
> findMethods and showMethods find the method. However, getMethod doesn't:
> ### R code
>> getMethod("[","genind")
> Error in getMethod("[", "genind") :
> No method found for function "[" and signature genind
> ### end R code
>
> Now, if I just try the same thing after sourcing the code of the method
> manually, everything works fine. showMethods then reads:
> ### R code
>> showMethods("[", classes="genind")
> Function: [ (package base)
> x="genind"
> x="genind", i="ANY", j="ANY", drop="ANY"
> x="genind", i="numeric", j="missing", drop="missing"
> (inherited from: x="genind", i="ANY", j="ANY", drop="ANY")
> ### end R code
>
> My R version/session is:
> ### R code
>> R.version
> _
> platform i686-pc-linux-gnu
> arch i686
> os linux-gnu
> system i686, linux-gnu
> status
> major 2
> minor 11.0
> year 2010
> month 04
> day 22
> svn rev 51801
> language R
> version.string R version 2.11.0 (2010-04-22)
>
>> sessionInfo()
> R version 2.11.0 (2010-04-22)
> i686-pc-linux-gnu
>
> locale:
> [1] LC_CTYPE=en_GB.utf8 LC_NUMERIC=C
> [3] LC_TIME=en_GB.utf8 LC_COLLATE=en_GB.utf8
> [5] LC_MONETARY=C LC_MESSAGES=en_GB.utf8
> [7] LC_PAPER=en_GB.utf8 LC_NAME=C
> [9] LC_ADDRESS=C LC_TELEPHONE=C
> [11] LC_MEASUREMENT=en_GB.utf8 LC_IDENTIFICATION=C
>
> attached base packages:
> [1] stats graphics grDevices utils datasets methods base
>
> other attached packages:
> [1] adegenet_1.2-4 MASS_7.3-5
>
> loaded via a namespace (and not attached):
> [1] graph_1.26.0 phylobase_0.5 tcltk_2.11.0 tools_2.11.0
>
> ### end R code
>
> R was compiled from the sources. All packages are up-to-date (as of the 21
> May 2010). My system is a Ubuntu 10.04 (32 bits), with kernel
> 2.6.31-20-generic. I could not reproduce the problem using R 2.11.0 on
> Windows Vista, or on Debian testing (R 2.11.0 compiled from the sources). The
> package adegenet does not have a namespace. The error arises whether using a
> field 'Collate' in DESCRIPTION, or not. I checked that the source file is
> indeed sourced when loading the package: it is. The method "[" is not defined
> by any other package for 'genind' objects.
>
> I would be pleased to get any piece of insight, advice, or explanation for
> this issue. Thanks in advance for your time.
>
> Best regards,
>
> Thibaut Jombart.
>
>
--
Martin Morgan
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
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel