【问题标题】:Namespace issue with raster package plot function?栅格包绘图功能的命名空间问题?
【发布时间】:2013-01-04 10:55:33
【问题描述】:

我在使用 'raster' 包的 'plot' 功能时遇到了一个奇怪的问题。

library(raster)
ras <- raster(ncol=10, nrow=10)

编辑

values(ras) <- runif(ncell(ras))

结束编辑

plot(ras)

Erreur dans as.double(y) : 
cannot coerce type 'S4' to vector of type 'double'

对于我在网上阅读的内容,此错误取决于用户,并且可能取决于加载的包。就我而言,问题来自于 r 使用 'graphics' 包中的标准 'plot' 方法,而它应该使用特定的 'raster' 方法,因为 'ras' 是 rasterLayer 对象。但是,由于我不明白的原因,'plot' 没有导入到 'raster' 命名空间中,而所有其他函数都是。

> raster::plot
Erreur : 'plot' n'est pas un objet exporté depuis 'namespace:raster'

对比:

raster::persp
standardGeneric for "persp" defined from package "graphics"
function (x, ...) 
standardGeneric("persp")
<environment: 0x0cd9eb80>
Methods may be defined for arguments: x
Use  showMethods("persp")  for currently available ones.

由于我不完全了解命名空间的行为方式,我正在寻求您的帮助!这种情况你是不是很熟悉,你有办法解决吗?同时,你知道一个显示命名空间内容的函数吗(这样我就可以逐步检查栅格命名空间的内容)?

PS:我在 RStudio 中使用 R 2.15.2,加载了许多包但都是最新的。

sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=French_Belgium.1252  LC_CTYPE=French_Belgium.1252          LC_MONETARY=French_Belgium.1252 LC_NUMERIC=C                   
[5] LC_TIME=French_Belgium.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] raster_2.0-41 sp_1.0-5     

loaded via a namespace (and not attached):
 [1] grid_2.15.0      hexbin_1.26.0    intervals_0.13.3 lattice_0.20-6   rgdal_0.8-4      spacetime_1.0-3  spam_0.29-2      tools_2.15.0    
 [9] xts_0.9-2        zoo_1.7-9             

谢谢你,

弗朗索瓦

【问题讨论】:

  • 在前三行 Error in .plotraster2(x, col = col, maxpixels = maxpixels, add = add, : no values associated with this RasterLayer 之后出现不同的错误。使用帮助中的示例,看看您是否可以复制您的错误。
  • 我得到了和 mnel 一样的错误...PS : 你可以使用this 有英文的错误信息..
  • 是的,我忘了用数字填充栅格,抱歉。现在它应该可以工作了(或者像我一样失败)。

标签: r namespaces raster


【解决方案1】:

我遇到了同样的问题,重新安装光栅包解决了它。

install.packages("raster")

【讨论】:

    【解决方案2】:

    我在同样的错误中运行,也使用 RStudio。

    我的问题是我通过library(raster) 在我的项目的.Rprofile 文件中加载了raster 包。但是 Rprofile 中的代码会先于其他任何内容加载,因此 graphics 包(包含通用绘图)在光栅之后加载,导致问题。

    解决方案:在 Rprofile 中将 library(graphics) 放在 library(raster) 之前,它对我有用。

    【讨论】:

      【解决方案3】:

      对我来说,解决这个 S4 类命名空间问题的方法是将 raster 包添加为依赖项。因此,使用 attach() 函数也应该可以工作,因为这就是依赖项的作用。我知道这不是一个理想的解决方案,但是嘿,它是一种统计语言;)

      【讨论】:

        【解决方案4】:

        当您有一个陈旧的会话(通常是由于在启动时加载旧会话引起)时,有时会发生这种情况,如果您启动一个新的 R 会话(不加载以前保存的会话),这种情况就会消失。

        【讨论】:

        • 我也遇到了同样的问题。我不确定如何加载新会话而不自动加载以前的设置,所以我从工作目录中删除了所有 .R* 文件,它似乎又可以正常工作了。
        【解决方案5】:

        使用它你可以获得包光栅的所有对象列表

        basevals <- ls(pos="package:raster") 
        

        例如

           which(basevals == 'persp')  ## function persp shows up because it is the exported generic.
           141
           which(basevals == 'plot')   ## no function plot
           integer(0)
        

        不,当我这样做时,它对我有用:

        library(raster)
        r <- raster(ncol=10, nrow=10)
        values(r) <- runif(ncell(r))
        plot(r, main='Raster with 100 cells')
        

        所以这里肯定有情节方法。它不在上一个列表“basevals”中,因为它是一种 S4 方法。

        要获得光栅包的绘图方法,试试这个:

         getMethod('plot',signature=signature(x='Raster', y='ANY'))
        

        或更有效地使用

        findMethods("plot", "package:raster"). 
        

        【讨论】:

        • +1。我忘了这是一个S4问题。那里肯定有 plot 方法,只是不是 S3 方法,因此您的答案的第一部分显示没有绘图方法,而 persp 出现,因为它是导出的泛型。使用findMethods("plot", "package:raster") 可以更有效地完成最后一点。
        • @GavinSimpson 感谢您的聪明评论!我用它来更新我的答案。
        • 感谢您的回答。我理解我没有找到光栅图方法并不意味着它不存在。但是“getMethod”也没有得到它。 getMethod('plot',signature=signature(x='Raster', y='ANY')) getMethod("plot", signature = signature(x = "Raster", y = "ANY")) 错误:否为函数“绘图”和签名 Raster 找到方法
        • @fstevens 你能在你的 R 会话中试试这个吗...如果不给我你的 sessionInfo()?
        • @fstevens 哎呀 ..也许最好是在新的 R 会话中进行......在那里你有更少的包..
        猜你喜欢
        • 2016-01-29
        • 1970-01-01
        • 2021-04-02
        • 1970-01-01
        • 2011-02-05
        • 2013-01-21
        • 1970-01-01
        • 2013-04-15
        相关资源
        最近更新 更多