我使用了这本书"地理统计测绘实用指南"来自T. Hengl,它还提供code来重现结果。不幸的是,所包含的代码的加载已被弃用甚至不存在。我能够恢复大部分代码,但现在我仍然坚持看似简单的东西:合并两个数据帧。我的错误:
Error in (function (cl, name, valueClass) : ‘data’ is not a slot in class “data.frame”
这里是重现该错误的代码:
library(gstat)
library(rgdal)
library(sp)
# load the data:
data(meuse)
coordinates(meuse) <- ~x+y
proj4string(meuse) <- CRS("+init=epsg:28992")
download.file("http://spatial-analyst.net/book/system/files/meuse.zip", destfile=paste(getwd(), "meuse.zip", sep="/"))
grid.list <- c("ahn.asc", "dist.asc", "ffreq.asc", "soil.asc")
# unzip the maps in a loop:
for(j in grid.list){
fname <- unzip("meuse.zip", file=j)
print(fname)
file.copy(fname, paste("./", j, sep=""), overwrite=FALSE)
}
# load grids to R:
meuse.grid <- readGDAL(grid.list[1])
# fix the layer name:
names(meuse.grid)[1] <- sub(".asc", "", grid.list[1])
for(i in grid.list[-1]) {
meuse.grid@data[sub(".asc", "", i[1])] <- readGDAL(paste(i))$band1
}
names(meuse.grid)
proj4string(meuse.grid) <- CRS("+init=epsg:28992")
meuse.ov <- over(meuse, meuse.grid)
str(meuse.ov)
meuse.data <- meuse[c("zinc", "lime")]@data
str(meuse.data)
meuse.ov@data <- merge(meuse.ov, meuse.data)
这实在令人困惑,因为两个数据框(meuse.ov和meuse.data)的结构看起来都相同:
> str(meuse.ov)
'data.frame': 155 obs. of 4 variables:
$ ahn : int 3214 3402 3277 3563 3406 3355 3428 3476 3522 3525 ...
$ dist : num 0.00136 0.01222 0.10303 0.19009 0.27709 ...
$ ffreq: int 1 1 1 1 1 1 1 1 1 1 ...
$ soil : int 1 1 1 2 2 2 2 1 1 2 ...
和
> str(meuse.data)
'data.frame': 155 obs. of 2 variables:
$ zinc: num 1022 1141 640 257 269 ...
$ lime: Factor w/ 2 levels "0","1": 2 2 2 1 1 1 1 1 1 1 ...
我尝试通过在stackoverflow上查找来解决这个问题,但没有任何工作。书中的(不可工作的)遗留代码表明了这一点(可能是您的理解):
meuse.ov <- overlay(meuse.grid, meuse)
meuse.ov@data <- cbind(meuse.ov@data, meuse[c("zinc", "lime")]@data)