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 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel