Unverified Commit fa6d3565 authored by James Lamb's avatar James Lamb Committed by GitHub
Browse files

[R-package] avoid misleading warnings when using interaction constraints (fixes #4108) (#4232)

parent 086f0785
...@@ -166,6 +166,11 @@ lgb.cv <- function(params = list() ...@@ -166,6 +166,11 @@ lgb.cv <- function(params = list()
} }
end_iteration <- begin_iteration + params[["num_iterations"]] - 1L end_iteration <- begin_iteration + params[["num_iterations"]] - 1L
# pop interaction_constraints off of params. It needs some preprocessing on the
# R side before being passed into the Dataset object
interaction_constraints <- params[["interaction_constraints"]]
params["interaction_constraints"] <- NULL
# Construct datasets, if needed # Construct datasets, if needed
data$update_params(params = params) data$update_params(params = params)
data$construct() data$construct()
...@@ -177,7 +182,10 @@ lgb.cv <- function(params = list() ...@@ -177,7 +182,10 @@ lgb.cv <- function(params = list()
} else if (!is.null(data$get_colnames())) { } else if (!is.null(data$get_colnames())) {
cnames <- data$get_colnames() cnames <- data$get_colnames()
} }
params[["interaction_constraints"]] <- lgb.check_interaction_constraints(params = params, column_names = cnames) params[["interaction_constraints"]] <- lgb.check_interaction_constraints(
interaction_constraints = interaction_constraints
, column_names = cnames
)
# Check for weights # Check for weights
if (!is.null(weight)) { if (!is.null(weight)) {
......
...@@ -144,6 +144,11 @@ lgb.train <- function(params = list(), ...@@ -144,6 +144,11 @@ lgb.train <- function(params = list(),
} }
end_iteration <- begin_iteration + params[["num_iterations"]] - 1L end_iteration <- begin_iteration + params[["num_iterations"]] - 1L
# pop interaction_constraints off of params. It needs some preprocessing on the
# R side before being passed into the Dataset object
interaction_constraints <- params[["interaction_constraints"]]
params["interaction_constraints"] <- NULL
# Construct datasets, if needed # Construct datasets, if needed
data$update_params(params = params) data$update_params(params = params)
data$construct() data$construct()
...@@ -156,7 +161,7 @@ lgb.train <- function(params = list(), ...@@ -156,7 +161,7 @@ lgb.train <- function(params = list(),
cnames <- data$get_colnames() cnames <- data$get_colnames()
} }
params[["interaction_constraints"]] <- lgb.check_interaction_constraints( params[["interaction_constraints"]] <- lgb.check_interaction_constraints(
params = params interaction_constraints = interaction_constraints
, column_names = cnames , column_names = cnames
) )
......
...@@ -168,21 +168,21 @@ lgb.params2str <- function(params, ...) { ...@@ -168,21 +168,21 @@ lgb.params2str <- function(params, ...) {
} }
lgb.check_interaction_constraints <- function(params, column_names) { lgb.check_interaction_constraints <- function(interaction_constraints, column_names) {
# Convert interaction constraints to feature numbers # Convert interaction constraints to feature numbers
string_constraints <- list() string_constraints <- list()
if (!is.null(params[["interaction_constraints"]])) { if (!is.null(interaction_constraints)) {
if (!methods::is(params[["interaction_constraints"]], "list")) { if (!methods::is(interaction_constraints, "list")) {
stop("interaction_constraints must be a list") stop("interaction_constraints must be a list")
} }
if (!all(sapply(params[["interaction_constraints"]], function(x) {is.character(x) || is.numeric(x)}))) { if (!all(sapply(interaction_constraints, function(x) {is.character(x) || is.numeric(x)}))) {
stop("every element in interaction_constraints must be a character vector or numeric vector") stop("every element in interaction_constraints must be a character vector or numeric vector")
} }
for (constraint in params[["interaction_constraints"]]) { for (constraint in interaction_constraints) {
# Check for character name # Check for character name
if (is.character(constraint)) { if (is.character(constraint)) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment