Проблемы с растровым анализом (наклон и для цикла)

#r #if-statement #raster

Вопрос:

У меня проблема с запуском цикла на растре.

Предыстория: У меня есть файл дерева, большой пространственно-временной кадр. В этом файле дерева у меня есть данные о деревьях, таких как высота, dbh (диаметр на высоте груди), виды и уклон. Наклон извлекается из DEM таким образом (r.temp является копией DEM):

 r.temp = raster::terrain(r.temp, opt="slope", unit="degrees") # calculate slope treefile@data$slope = round(raster::extract(r.temp, treefile)) # assign slope to trees  

Основное внимание в моем сценарии уделяется запуску модели (в пакете R) о стабильности дерева и размещению выходных данных на растре того же размера, что и DEM. Для этого я разделяю растр на плитки, для каждой плитки мне нужно изменить название вида в соответствии с наклоном. Поэтому я сделал этот цикл:

 for( i in 1:nrow(treefile@data)){    if( treefile@data[i,"species"] == "NS"){  # check slope and assign correct species code  if( treefile@data[i,"slope"] lt;= 20 ){  treefile@data[i,"species"] = "U_NS_f"  } else {  treefile@data[i,"species"] = "U_NS_s"  }  }  

Здесь возникает проблема: R говорит, что в этом цикле у меня отсутствует значение. Я думаю, это потому, что в некоторых плитках у меня очень мало данных, поэтому я не смог рассчитать наклон, поэтому, когда я вызываю treefile@data$slope, он путается. Учитывая эту идею, я добавил еще один цикл для решения этой проблемы. Идея в том, что если у меня нет никакого значения наклона, то не должно быть вывода. Сценарий теперь выглядит так:

 if( nrow(treefile@data)==0 ){  out1 = r.crop  out1[out1] = NA  out1 = stack(out1,out1,out1) return(out1)  } else {  # assign correct species parameters according to slope  for( i in 1:nrow(treefile@data)){  if( treefile@data[i,"species"] == "NS"){  # check slope and assign correct species code  if( treefile@data[i,"slope"] lt;= 20 ){  treefile@data[i,"species"] = "U_NS_f"  } else {  treefile@data[i,"species"] = "U_NS_s"  }  } }  

Когда я запускаю скрипт, R снова показывает мне ту же проблему, что и раньше… Но я не могу понять, в чем заключается ошибка…

Комментарии:

1. Я обнаружил ошибку: я написал r.crop вместо r.temp, он не был определен раньше, поэтому R не мог понять, что делать. Всегда обращайте внимание на имена переменных!