3

我在使用“光栅”包的“绘图”功能时遇到了一个奇怪的问题。

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             

谢谢,

弗朗索瓦

4

5 回答 5

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"). 
于 2013-01-21T12:00:27.730 回答
1

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

于 2013-02-16T07:24:27.633 回答
1

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

install.packages("raster")
于 2017-01-18T15:32:59.843 回答
0

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

于 2016-01-25T22:35:58.723 回答
0

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

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

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

于 2016-03-14T14:14:18.600 回答