Почему я получаю ошибку в последней строке этих данных, т.е. Ошибка в 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)
}
}
пожалуйста помоги! Я останусь очень благодарен!