带有栅格包绘图功能的命名空间问题?

时间:2013-01-21 11:34:54

标签: r namespaces raster

我遇到了'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             

谢谢你,

弗朗索瓦

5 个答案:

答案 0 :(得分:2)

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

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 :(得分:1)

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

答案 2 :(得分:1)

我遇到了同样的问题并重新安装了光栅包修复它。

install.packages("raster")

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我一直在运行同样的错误,也使用了RStudio。

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

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