[R-package] Use `cat()` instead of `print()` for metrics and callbacks (#6171)

This commit is contained in:
david-cortes 2023-11-02 13:36:03 +01:00 коммит произвёл GitHub
Родитель 3405ee82b9
Коммит 4546a8fded
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
3 изменённых файлов: 29 добавлений и 7 удалений

Просмотреть файл

@ -78,8 +78,7 @@ LINTERS_TO_USE <- list(
, "true_false" = lintr::T_and_F_symbol_linter()
, "undesirable_function" = lintr::undesirable_function_linter(
fun = c(
"cat" = "CRAN forbids the use of cat() in packages except in special cases. Use message() or warning()."
, "cbind" = paste0(
"cbind" = paste0(
"cbind is an unsafe way to build up a data frame. merge() or direct "
, "column assignment is preferred."
)

Просмотреть файл

@ -90,7 +90,7 @@ cb_print_evaluation <- function(period) {
# Check if message is existing
if (nchar(msg) > 0L) {
print(.merge_eval_string(env = env))
cat(.merge_eval_string(env = env), "\n")
}
}
@ -208,9 +208,9 @@ cb_early_stop <- function(stopping_rounds, first_metric_only, verbose) {
msg <- paste0(
"Will train until there is no improvement in "
, stopping_rounds
, " rounds."
, " rounds.\n"
)
print(msg)
cat(msg)
}
# Internally treat everything as a maximization task
@ -284,7 +284,7 @@ cb_early_stop <- function(stopping_rounds, first_metric_only, verbose) {
}
if (isTRUE(verbose)) {
print(paste0("Early stopping, best iteration is: ", best_msg[[i]]))
cat(paste0("Early stopping, best iteration is: ", best_msg[[i]], "\n"))
}
# Store best iteration and stop
@ -302,7 +302,7 @@ cb_early_stop <- function(stopping_rounds, first_metric_only, verbose) {
}
if (isTRUE(verbose)) {
print(paste0("Did not meet early stopping, best iteration is: ", best_msg[[i]]))
cat(paste0("Did not meet early stopping, best iteration is: ", best_msg[[i]], "\n"))
}
# Store best iteration and stop

Просмотреть файл

@ -3805,3 +3805,26 @@ test_that("lightgbm() correctly sets objective when passing lgb.Dataset as input
)
expect_equal(model$params$objective, "regression")
})
test_that("Evaluation metrics aren't printed as a single-element vector", {
log_txt <- capture_output({
data(mtcars)
y <- mtcars$mpg
x <- as.matrix(mtcars[, -1L])
cv_result <- lgb.cv(
data = lgb.Dataset(x, label = y)
, params = list(
objective = "regression"
, metric = "l2"
, min_data_in_leaf = 5L
, max_depth = 3L
, num_threads = .LGB_MAX_THREADS
)
, nrounds = 2L
, nfold = 3L
, verbose = 1L
, eval_train_metric = TRUE
)
})
expect_false(grepl("[1] \"[1]", log_txt, fixed = TRUE))
})