
#' Performs a grid search for parameters over a parameter grid.
#' @examples
#' args <- list(
#'     h = c(0.05, 0.1, 0.2),
#'     method = c("simple", "sgd"),
#'     tau = c(0.5, 0.1, 0.01)
#' )
#' cve.grid.search(args)
#' @export
cve.grid.search <- function(X, Y, k, args) {

    args$stringsAsFactors = FALSE
    args$KEEP.OUT.ATTRS = FALSE
    grid <- do.call(expand.grid, args)
    grid.length <- length(grid[[1]])

    print(grid)

    for (i in 1:grid.length) {
        arguments <- as.list(grid[i, ])
        # Set required arguments
        arguments$X <- X
        arguments$Y <- Y
        arguments$k <- k
        # print(arguments)
        dr <- do.call(cve.call, arguments)
        print(dr$loss)
    }
}

# ds <- dataset()
# X <- ds$X
# Y <- ds$Y
# (k <- ncol(ds$B))
# args <- list(
#     h = c(0.05, 0.1, 0.2),
#     method = c("simple", "sgd"),
#     tau = c(0.5, 0.1, 0.01),
#     attempts = c(1L)
# )

# cve.grid.search(X, Y, k, args)