From 7ca60b54268d215bd030b04ef542b8cf7dfa3acc Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Tue, 2 Jun 2020 13:08:21 +0200 Subject: [PATCH 1/5] Turn matrix to storage mode "double" --- R-package/R/lgb.Predictor.R | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/R-package/R/lgb.Predictor.R b/R-package/R/lgb.Predictor.R index c9106b488afa..5863f69a6334 100644 --- a/R-package/R/lgb.Predictor.R +++ b/R-package/R/lgb.Predictor.R @@ -142,6 +142,10 @@ Predictor <- R6::R6Class( # Check if data is a matrix if (is.matrix(data)) { + # Check whether matrix is the correct type first ("double") + if (storage.mode(data) != "double") { + storage.mode(data) <- "double" + } preds <- lgb.call( "LGBM_BoosterPredictForMat_R" , ret = preds From 4cce98d9466034da1e0bfa6d2118da25b2d7c3da Mon Sep 17 00:00:00 2001 From: mayer79 Date: Tue, 2 Jun 2020 20:00:20 +0200 Subject: [PATCH 2/5] added "test_Predictor.R" to R tests with check for integer storage mode during prediction --- R-package/tests/testthat/test_Predictor.R | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 R-package/tests/testthat/test_Predictor.R diff --git a/R-package/tests/testthat/test_Predictor.R b/R-package/tests/testthat/test_Predictor.R new file mode 100644 index 000000000000..8b4df62e13fb --- /dev/null +++ b/R-package/tests/testthat/test_Predictor.R @@ -0,0 +1,17 @@ +context("Predictor") + +test_that("predictions do not fail for integer input", { + X <- as.matrix(as.integer(iris[, "Species"]), ncol = 1) + y <- iris[["Sepal.Length"]] + dtrain <- lgb.Dataset(X, label = y) + fit <- lgb.train( + data = dtrain + , objective = "regression" + , verbose = -1L + ) + X_double <- X_integer <- X[c(1, 51, 101), , drop = FALSE] + storage.mode(X_double) <- "double" + pred_integer <- predict(fit, X_integer) + pred_double <- predict(fit, X_double) + expect_equal(pred_integer, pred_double) +}) From 12e32caa5651fb15ec6208ec5566e9d6bd58301c Mon Sep 17 00:00:00 2001 From: mayer79 Date: Tue, 2 Jun 2020 20:20:18 +0200 Subject: [PATCH 3/5] Explicit integers in test_Preditor to avoid TravisCI failure --- R-package/tests/testthat/test_Predictor.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R-package/tests/testthat/test_Predictor.R b/R-package/tests/testthat/test_Predictor.R index 8b4df62e13fb..b63ddc74f085 100644 --- a/R-package/tests/testthat/test_Predictor.R +++ b/R-package/tests/testthat/test_Predictor.R @@ -1,7 +1,7 @@ context("Predictor") test_that("predictions do not fail for integer input", { - X <- as.matrix(as.integer(iris[, "Species"]), ncol = 1) + X <- as.matrix(as.integer(iris[, "Species"]), ncol = 1L) y <- iris[["Sepal.Length"]] dtrain <- lgb.Dataset(X, label = y) fit <- lgb.train( @@ -9,7 +9,7 @@ test_that("predictions do not fail for integer input", { , objective = "regression" , verbose = -1L ) - X_double <- X_integer <- X[c(1, 51, 101), , drop = FALSE] + X_double <- X_integer <- X[c(1L, 51L, 101L), , drop = FALSE] storage.mode(X_double) <- "double" pred_integer <- predict(fit, X_integer) pred_double <- predict(fit, X_double) From d00f97f84b4b7b0565427949103a19d41ba9c730 Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Wed, 3 Jun 2020 07:52:04 +0200 Subject: [PATCH 4/5] properly aligning comment on storage.mode Co-authored-by: James Lamb --- R-package/R/lgb.Predictor.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R-package/R/lgb.Predictor.R b/R-package/R/lgb.Predictor.R index 5863f69a6334..fa2b14c94614 100644 --- a/R-package/R/lgb.Predictor.R +++ b/R-package/R/lgb.Predictor.R @@ -142,7 +142,7 @@ Predictor <- R6::R6Class( # Check if data is a matrix if (is.matrix(data)) { - # Check whether matrix is the correct type first ("double") + # Check whether matrix is the correct type first ("double") if (storage.mode(data) != "double") { storage.mode(data) <- "double" } From 9e527069f82c40e5ad9f912b7649473b6e06650f Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Wed, 3 Jun 2020 07:56:40 +0200 Subject: [PATCH 5/5] split double assignment into two lines --- R-package/tests/testthat/test_Predictor.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R-package/tests/testthat/test_Predictor.R b/R-package/tests/testthat/test_Predictor.R index b63ddc74f085..963046619869 100644 --- a/R-package/tests/testthat/test_Predictor.R +++ b/R-package/tests/testthat/test_Predictor.R @@ -9,7 +9,8 @@ test_that("predictions do not fail for integer input", { , objective = "regression" , verbose = -1L ) - X_double <- X_integer <- X[c(1L, 51L, 101L), , drop = FALSE] + X_double <- X[c(1L, 51L, 101L), , drop = FALSE] + X_integer <- X_double storage.mode(X_double) <- "double" pred_integer <- predict(fit, X_integer) pred_double <- predict(fit, X_double)