Mark and Mike, Thanks for reporting and clarifying. Fixed, I think, in raster version 2.2-45. Robert
On Wed, Jul 30, 2014 at 1:13 AM, Michael Sumner <mdsum...@gmail.com> wrote: > Hello, > > Thanks for clarifying, I get that problem too. If I get a chance I'll > have a closer look, but otherwise here's my notes for now. > > Note that conversion to stack allows it to work: > library(raster) > Loading required package: sp > b <- > brick('http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/godas/pottmp.2013.nc', > lvar=3, level=1, varname='pottmp') > dropLayer(stack(b), 1:2) > > I presume you are getting this url read via the ncdf4 package? (And > not via the GDAL DODS driver, for example). > > I get the same problem with subset() where i is longer than 1 > (dropLayer is a wrapper around subset). Below is my subset traceback > and session info. > > Cheers, Mike. > > subset(x, 1:2) > Error in (function (classes, fdef, mtable) : > unable to find an inherited method for function ‘extent’ for > signature ‘"character"’ > In addition: Warning message: > In .stackCDF(x, varname = varname, bands = bands) : > pottmp has 4 dimensions, I am using the last one >> traceback() > 8: stop(gettextf("unable to find an inherited method for function %s > for signature %s", > sQuote(fdef@generic), sQuote(cnames)), domain = NA) > 7: (function (classes, fdef, mtable) > { > methods <- .findInheritedMethods(classes, fdef, mtable) > if (length(methods) == 1L) > return(methods[[1L]]) > else if (length(methods) == 0L) { > cnames <- paste0("\"", sapply(classes, as.character), > "\"", collapse = ", ") > stop(gettextf("unable to find an inherited method for > function %s for signature %s", > sQuote(fdef@generic), sQuote(cnames)), domain = NA) > } > else stop("Internal error in finding inherited methods; didn't > return a unique method", > domain = NA) > })(list("character"), function (x, ...) > standardGeneric("extent"), <environment>) > 6: extent(x) > 5: setExtent(x, value) > 4: `extent<-`(`*tmp*`, value = <S4 object of class "Extent">) > 3: .local(x, ...) > 2: subset(x, 1:2) > 1: subset(x, 1:2) > > sessionInfo() > R version 3.1.0 (2014-04-10) > Platform: x86_64-redhat-linux-gnu (64-bit) > > locale: > [1] C > > attached base packages: > [1] stats graphics grDevices utils datasets methods base > > other attached packages: > [1] ncdf4_1.12 raster_2.2-31 sp_1.0-15 > > loaded via a namespace (and not attached): > [1] grid_3.1.0 lattice_0.20-29 tools_3.1.0 > > > > > > > On Wed, Jul 30, 2014 at 5:45 PM, Mark Payne <markpayneatw...@gmail.com> wrote: >> No, apparently it is still a brick: >> >>> class(b) >> [1] "RasterBrick" >> attr(,"package") >> [1] "raster" >> >> >> Here is a minimum (not)-working example, based on this post, which seems to >> be having similar problems: >> http://r-sig-geo.2731867.n2.nabble.com/Subset-a-Raster-object-read-from-a-4D-NetCDF-file-td7586200.html >> >> Example follows: >>> library(raster) >> Loading required package: sp >>> b <- >>> brick('http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/godas/pottmp.2013.nc', >>> lvar=3, level=1, varname='pottmp') >>> b >> class : RasterBrick >> dimensions : 418, 360, 150480, 12 (nrow, ncol, ncell, nlayers) >> resolution : 1, 0.3333309 (x, y) >> extent : 0, 360, -74.66667, 64.66567 (xmin, xmax, ymin, ymax) >> coord. ref. : +proj=longlat +datum=WGS84 >> data source : >> http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/godas/pottmp.2013.nc >> names : X2013.01.01, X2013.02.01, X2013.03.01, X2013.04.01, >> X2013.05.01, X2013.06.01, X2013.07.01, X2013.08.01, X2013.09.01, >> X2013.10.01, X2013.11.01, X2013.12.01 >> Date : 2013-01-01, 2013-02-01, 2013-03-01, 2013-04-01, 2013-05-01, >> 2013-06-01, 2013-07-01, 2013-08-01, 2013-09-01, 2013-10-01, 2013-11-01, >> 2013-12-01 >> varname : pottmp >> level : 1 >> >>> dropLayer(b,1) >> >> Error in (function (classes, fdef, mtable) : >> unable to find an inherited method for function ‘extent’ for signature >> ‘"character"’ >> In addition: Warning message: >> In .stackCDF(x, varname = varname, bands = bands) : >> pottmp has 4 dimensions, I am using the last one >>> >> >> >> >> On 29 July 2014 13:24, Michael Sumner <mdsum...@gmail.com> wrote: >>> >>> Are you sure that your "b" is still really a RasterBrick? That message >>> comes if you give the functions character: >>> >>> library(raster) >>> dropLayer("sometext", 1) >>> Error in (function (classes, fdef, mtable) : >>> unable to find an inherited method for function ‘dropLayer’ for >>> signature ‘"character"’ >>> >>> (Basically because the functions are all generics, they scans through >>> available methods and tells you it can't find one for "character"). >>> >>> It works for me, see contrived example below that I had on hand due to >>> obscure testing many years ago. >>> (There is warning related to subsetting a linked-4D file, but that >>> seems harmless). >>> >>> But, also try selecting only the bands you want at read time (or even >>> just use a stack), so >>> >>> b <- brick("/blah/blah/ncep_07c_tho_all_1948-2010.mon.nc", level = 3, >>> band = 1:5) >>> >>> Cheers, Mike. >>> >>> ## create a 4D NetCDF file in R >>> ## load NetCDF package >>> library(RNetCDF) >>> ## generate 4D data - 1:N >>> dims <- c(2, 3, 2, 2) >>> a <- array(data = 1:prod(dims), dim = dims) >>> >>> ## create NetCDF file >>> nc <- create.nc("test-1.nc") >>> ## coordinate values for NetCDF (to test transform and band metadata) >>> x <- seq(0, 5, length = dim(a)[1]) >>> y <- seq(0, 2, length = dim(a)[2]) >>> c3 <- seq(0, 1, length = dim(a)[3]) >>> c4 <- seq(0, 1, length = dim(a)[4]) >>> >>> ## dimensions >>> dim.def.nc(nc, "x", length(x)) >>> dim.def.nc(nc, "y", length(y)) >>> dim.def.nc(nc, "c3", length(c3)) >>> dim.def.nc(nc, "c4", length(c4)) >>> >>> ## variables >>> var.def.nc(nc, "a", "NC_DOUBLE", c(0, 1, 2, 3)) >>> var.def.nc(nc, "x", "NC_DOUBLE", 0) >>> var.def.nc(nc, "y", "NC_DOUBLE", 1) >>> var.def.nc(nc, "c3", "NC_DOUBLE", 2) >>> var.def.nc(nc, "c4", "NC_DOUBLE", 3) >>> ## write the data (all at once, no start/count) >>> var.put.nc(nc, "a", a) >>> var.put.nc(nc, "x", x) >>> var.put.nc(nc, "y", y) >>> var.put.nc(nc, "c3", c3) >>> var.put.nc(nc, "c4", c4) >>> ## finish up >>> close.nc(nc) >>> >>> library(raster) >>> b <- brick("test-1.nc", level = 2) >>> nlevels(b) >>> dropLayer(b, 1) >>> class : RasterLayer >>> band : 2 (of 2 bands) >>> dimensions : 3, 2, 6 (nrow, ncol, ncell) >>> resolution : 5, 1 (x, y) >>> extent : -2.5, 7.5, -0.5, 2.5 (xmin, xmax, ymin, ymax) >>> coord. ref. : NA >>> data source : C:\temp\test-1.nc >>> names : X1 >>> z-value : 1 >>> zvar : a >>> level : 1 >>> >>> Warning message: >>> In .rasterObjectFromCDF(x, type = objecttype, band = band, ...) : >>> "level" set to 1 (there are 2 levels) >>> >>> >>> On Tue, Jul 29, 2014 at 7:43 PM, Mark Payne <markpayneatw...@gmail.com> >>> wrote: >>> > Hi, >>> > >>> > I have a 4D climate model output that I am trying to work with via >>> > raster, >>> > and that is unfortunately giving problems. I create the object as a >>> > brick: >>> > >>> >> b >>> > class : RasterBrick >>> > dimensions : 220, 254, 55880, 756 (nrow, ncol, ncell, nlayers) >>> > resolution : 1, 1 (x, y) >>> > extent : 0.5, 254.5, 0.5, 220.5 (xmin, xmax, ymin, ymax) >>> > coord. ref. : +proj=longlat +datum=WGS84 >>> > data source : /home/mpayne/Documents/NACLIM/ >>> > ncep_07c_tho_all_1948-2010.mon.nc >>> > names : X19480131, X19480229, X19480331, X19480430, X19480531, >>> > X19480630, X19480731, X19480831, X19480930, X19481031, X19481130, >>> > X19481231, X19490131, X19490228, X19490331, ... >>> > z-value : 19480131, 20101231 (min, max) >>> > varname : var2 >>> > level : 3 >>> > >>> > But I would like to drop a lot of the layers, so I try: >>> > >>> >> dropLayer(b,1:5) >>> > Error in (function (classes, fdef, mtable) : >>> > unable to find an inherited method for function ‘extent’ for signature >>> > ‘"character"’ >>> >> >>> > >>> > And get a rather strange error.... Trying subset instead: >>> > >>> >> subset(b,1:5) >>> > Error in (function (classes, fdef, mtable) : >>> > unable to find an inherited method for function ‘extent’ for signature >>> > ‘"character"’ >>> >> >>> > Gives the same error. I'm assuming that this is related to the 4D nature >>> > of >>> > the data, as I can't reproduce it elsewise, e.g. using the examples... >>> > Any >>> > ideas? >>> > >>> > Best wishes, >>> > >>> > Mark >>> > >>> > [[alternative HTML version deleted]] >>> > >>> > >>> > _______________________________________________ >>> > R-sig-Geo mailing list >>> > R-sig-Geo@r-project.org >>> > https://stat.ethz.ch/mailman/listinfo/r-sig-geo >>> > >>> >>> >>> >>> -- >>> Michael Sumner >>> Software and Database Engineer >>> Australian Antarctic Division >>> Hobart, Australia >>> e-mail: mdsum...@gmail.com >> >> > > > > -- > Michael Sumner > Software and Database Engineer > Australian Antarctic Division > Hobart, Australia > e-mail: mdsum...@gmail.com > > _______________________________________________ > R-sig-Geo mailing list > R-sig-Geo@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-sig-geo _______________________________________________ R-sig-Geo mailing list R-sig-Geo@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo