R/build.distanceBlacklist.R

build.distanceBlacklist <- function(names, positions, distance, exceptions = NULL, blacklist = NULL, norm = "2",
                                    plotrestrictions = FALSE, debug = FALSE) {

  try(if(length(names) != NCOL(positions)) stop("Number of positions is not equal to number of nodes."))

  if (plotrestrictions &  NROW(positions) <= 2 ) {
    plot.graphrestrictions(nodes, positions, distance )
  }

  if ( !(is.null(exceptions)) ){
    names <- names[ -exceptions ]
    positions <- positions[ , - exceptions]
  }

  names.list <- list()
  positions.list <- list()
  Nnodes <- length(names)

  nrow_ <- NROW(positions)
  for (i in 1:(Nnodes - 1) ) {
    names.list[[i]] <- names
    names <- names[2:length(names)]
    positions.list[[i]] <- positions
    positions <- matrix(positions[ , 2:NCOL(positions)], nrow = nrow_) # matrix needs to be preserved
  }

  distanceBlacklist <- mapply(FUN =  learning.complement2 , nodes = names.list , positions = positions.list,
                              MoreArgs=list(distance = distance, norm_ = norm) )
  distanceBlacklist <- do.call("rbind", distanceBlacklist)

  if (debug){
    print("Generated blacklist: ")
    print(distanceBlacklist)
  }

  if (is.null(blacklist) ) {  blacklist <- matrix(nrow = 0, ncol = 2, byrow = TRUE, dimnames = list(NULL, c("from", "to")))}
  blacklist <- rbind(blacklist, distanceBlacklist)

  return(blacklist)
}
MNLR/downscaleR.BN documentation built on June 12, 2019, 5:39 p.m.