Почему я получаю ошибку в последней строке этих данных, т.е. Ошибка в y [i,]: не удается получить слот ("Полигоны") из объекта типа "NULL"

Я извлекаю значения пикселей из шейп-файла для контролируемой классификации изображений, и последняя строка выдает ошибку:

Error in y[i, ] : 
  cannot get a slot ("Polygons") from an object of type "NULL"

Я пробовал тот же код ранее на других данных, и он сработал. Наряду с неудачным кодом, который я публикую здесь, я также подтверждаю ссылки на данные и тексты кодировок, одно из которых не удалось, а другое работало.

https://drive.google.com/drive/folders/11t3ClyvBcMDAPXjzjDy3vg3P62CgDAdV?usp=sharing, https://drive.google.com/drive/folders/1nexpoS2LHfkvtNW167Z59K1LT2kmjDmZ?usp=sharing

library(rgdal)
library(raster)
library(caret)

img <- brick("Composite_LT05_L1TP_145039_19950318_20170109_01_T1_B1.tif")

names(img) <- c("B1", "B2", "B3", "B4" ,"B5","B6")

plotRGB(img,5,4,3, stretch = "lin")

trainData <- shapefile("trainData1.shp")
responseCol <- "class"

dfAll = data.frame(matrix(vector(), nrow = 0, ncol = length(names(img)) + 1))   
for (i in 1:length(unique(trainData[[responseCol]]))){
  category <- unique(trainData[[responseCol]])[i]
  categorymap <- trainData[trainData[[responseCol]] == category,]
  dataSet <- extract(img, categorymap)
  if(is(trainData, "SpatialPointsDataFrame")){
    dataSet <- cbind(dataSet, class = as.numeric(rep(category, nrow(dataSet))))
    dfAll <- rbind(dfAll, dataSet[complete.cases(dataSet),])
  }
  if(is(trainData, "SpatialPolygonsDataFrame")){
    dataSet <- dataSet[!unlist(lapply(dataSet, is.null))]
    dataSet <- lapply(dataSet, function(x){cbind(x, class = as.numeric(rep(category, nrow(x))))})
    df <- do.call("rbind", dataSet)
    dfAll <- rbind(dfAll, df)
  }
}

пожалуйста помоги! Я останусь очень благодарен!

0 ответов

Другие вопросы по тегам