我正在使用R包护林员对随机森林进行拟合以对光栅图像进行分类.预测函数产生错误,此后我提供了一个可重现的例子.
library(raster)
library(nnet)
library(ranger)
data(iris)
# put iris data into raster
r<-list()
for(i in 1:4){
r[[i]]<-raster(nrows=10, ncols=15)
r[[i]][]<-iris[,i]
}
r<-stack(r)
names(r)<-names(iris)[1:4]
# multinom (an example that works)
nn.model <- multinom(Species ~ ., data=iris, trace=F)
nn.pred<-predict(r,nn.model)
# ranger (doesn't work)
ranger.model<-ranger(Species ~ ., data=iris)
ranger.pred<-predict(r,ranger.model)
Run Code Online (Sandbox Code Playgroud)
给出的错误是
v [cells,]中的错误< - predv:矩阵上的下标数量不正确
虽然我的真实数据的错误是
p [-naind,]中的错误< - predv:要替换的项目数不是替换长度的倍数
我唯一想到的是,ranger.prediction对象包含了除感兴趣的预测之外的几个元素.无论如何,如何使用游侠在光栅堆栈上进行预测?
说我有一个数据框:
data <- data.frame(id=c(1,2,2,2),
code=c("A","B","A","B"),
area=c(23.1,56.0,45.8,78.5))
Run Code Online (Sandbox Code Playgroud)
这行代码行之有效:
df<-cast(data,id~code,fun.aggregate=sum)
Run Code Online (Sandbox Code Playgroud)
然后创建以下变量:
ID <- "id"
CODE <- "code"
Run Code Online (Sandbox Code Playgroud)
并将变量用作强制转换函数中的参数:
df <- cast(data, ID~CODE, fun.aggregate=sum)
Run Code Online (Sandbox Code Playgroud)
然后我得到以下错误:
Error: Casting formula contains variables not found in molten data: ID, CODE
Run Code Online (Sandbox Code Playgroud)
如何在强制转换功能中使用变量而不是列名?
我在R中使用了一些空间数据,并想知道是否使用依赖于旧的Spatial格式(包sp)或新包sf的包/函数.我根据此处的代码进行了此测试.
该想法是"识别相对于空间点数据集中的每个单独点落入xx米的最大距离内的所有点".
library(tictoc)
# define a buffer distance and a toy data
maxdist <- 500
df<-data.frame(x = runif(10000, 0, 100000),y = runif(10000, 0, 100000),id = 1:10000)
# doing the analysis using sf
library(sf)
tic("sf")
pts <- df %>% st_as_sf(coords = c("x", "y"))
pts_buf <- st_buffer(pts, maxdist,nQuadSegs = 5)
int <- st_intersects(pts_buf, pts)
toc()
# doing the analysis using sp
library(sp)
library(rgeos)
tic("sp")
pts2 <- SpatialPointsDataFrame(df[,1:2],as.data.frame(df[,3]))
pts_buf2 <- gBuffer(pts2, byid=TRUE,width=maxdist)
int2 <- over(pts_buf2, pts2,returnList = TRUE)
toc()
# size …Run Code Online (Sandbox Code Playgroud)