R/knnDaily.R

Defines functions knnDaily

Documented in knnDaily

#' KNN daily sampling
#'
#' @param cur_sim_PRCP  placeholder
#' @param cur_sim_TEMP placeholder
#' @param PRCP_TODAY placeholder
#' @param TEMP_TODAY placeholder
#' @param DATE_TOMORROW placeholder
#' @param k placeholder
#' @param sd_monthly_PRCP placeholder
#' @param sd_monthly_TEMP placeholder
#' @param mean_monthly_PRCP placeholder
#' @param mean_monthly_TEMP placeholder
#' @param k1 placeholder
#' @param count placeholder
#'
#' @return
#' @export
knnDaily <- function(
  cur_sim_PRCP = NULL,
  cur_sim_TEMP = NULL,
  PRCP_TODAY = NULL,
  TEMP_TODAY = NULL,
  DATE_TOMORROW = NULL,
  k = NULL,
  sd_monthly_PRCP = NULL,
  sd_monthly_TEMP = NULL,
  mean_monthly_PRCP = NULL,
  mean_monthly_TEMP = NULL,
  k1 = NULL,
  count  = NULL,
  seed = NULL)

{

  # If ne seed provided, generate a random number
  if(is.null(seed)) seed = sample.int(1e10,1)

  w_PRCP <- 100/sd_monthly_PRCP
	w_TEMP <- 10/sd_monthly_TEMP
	var_order <- 1:length(PRCP_TODAY)

	distance <- sqrt(w_PRCP*((cur_sim_PRCP-mean_monthly_PRCP) - (PRCP_TODAY-mean_monthly_PRCP))^2 +
	                 w_TEMP*((cur_sim_TEMP-mean_monthly_TEMP) - (TEMP_TODAY-mean_monthly_TEMP))^2)

	K_Distances <-	var_order[order(distance)[1:k]]

	set.seed(seed + k1*count)
	selection <- sample(1:k, 1, prob=(1/1:k)/sum(1/1:k))

	return(DATE_TOMORROW[K_Distances[selection]])

	}
tanerumit/gridwegen documentation built on Jan. 14, 2022, 6:40 p.m.