#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 не мог понять, что делать. Всегда обращайте внимание на имена переменных!