小编Hug*_*ugo的帖子

带有随机森林的图像分类(光栅堆栈)(包裹护林员)

我正在使用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对象包含了除感兴趣的预测之外的几个元素.无论如何,如何使用游侠在光栅堆栈上进行预测?

r raster

8
推荐指数
1
解决办法
1218
查看次数

强制转换{reshape}:使用变量代替列名

说我有一个数据框:

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)

如何在强制转换功能中使用变量而不是列名?

variables r reshape

5
推荐指数
1
解决办法
2856
查看次数

比较简单要素{sf}和空间对象{sp}:速度和记忆

我在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)

intersection r r-sp r-sf

5
推荐指数
1
解决办法
680
查看次数

标签 统计

r ×3

intersection ×1

r-sf ×1

r-sp ×1

raster ×1

reshape ×1

variables ×1