我遇到了'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
谢谢你,
弗朗索瓦
答案 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)
之前,这对我有用。