Общая цель моего кода - вычислить относительные ошибки в масштабе пикселей после объединения карты с высоким разрешением в карту с грубым разрешением.Чтобы сделать это, я уже создал фрейм данных (здесь обозначен как df), который по крайней мере соединяет эти числа.Затем я хотел вычислить относительную ошибку для каждого пикселя с грубым разрешением, и для этого мне нужно вычислить среднеквадратичную ошибку между грубым пикселем и содержащимися в нем точными пикселями, а также среднее значение для точных пикселейэто содержит.Затем необходимо выполнить итерацию по всем грубым пикселям.
Несмотря на то, что эта проблема решена с помощью цикла for (см. Ниже), это не самый оптимальный фрагмент кода, особенно потому, что кадр данныхдовольно большой (в основном потому, что я просматриваю большую область интереса).
Я считаю, что более эффективный подход использует () или, возможно, aggregate ()?, Но я не уверен, как это можно сделать.Я пытался адаптировать код (в частности, цикл for) к этим функциям, но безуспешно.Есть мысли о том, как заставить его работать с помощью ()?
df <- as.data.frame(cbind(FineSP@data,extract$cells,extract$coarseval))
names(df)[1] <- "fine_res_values"
names(df)[2] <- "cellnumber"
names(df)[3] <- "coarse_res_values"
df$cellnumber <- as.character(df$cellnumber)
uniquecells<-unique(df$cellnumber)
rmse_user <- function(fine, coarse){ # user fuction to calculate root-mean squared error
rmse_fun = sqrt( mean( (fine - coarse)^2, na.rm = TRUE) )
return(rmse_fun)
}
relative_error_user <- function(fine, coarse){ # user fuction to calculate pixel-scale relative error
relative_error_value <- round(rmse_user(fine, coarse) / mean(fine), 3)
return(relative_error_value)
}
relerror_compile <- vector()
i<-1
for(i in 1:length(uniquecells)){
filter <- df[which(df$cellnumber == uniquecells[i]),] # subset data frame by matching cell numbers
relerror_compile[i] <- relative_error_user(fine = filter$fine_res_values, coarse = filter$coarse_res_values) # apply the user-based function for relative error
}
# Initial (and unsuccessful) attempt to use by() as the alternative
by_test <-by (df$fine_res_values,list(df$cellnumber),FUN=function(z)