Learn R Programming

xgboost (version 3.1.2.1)

xgb.is.same.Booster: Check if two boosters share the same C object

Description

Checks whether two booster objects refer to the same underlying C object.

Usage

xgb.is.same.Booster(obj1, obj2)

Value

Either TRUE or FALSE according to whether the two boosters share the underlying C object.

Arguments

obj1

Booster model to compare with obj2.

obj2

Booster model to compare with obj1.

Details

As booster objects (as returned by e.g. xgb.train()) contain an R 'externalptr' object, they don't follow typical copy-on-write semantics of other R objects - that is, if one assigns a booster to a different variable and modifies that new variable through in-place methods like xgb.attr<-(), the modification will be applied to both the old and the new variable, unlike typical R assignments which would only modify the latter.

This function allows checking whether two booster objects share the same 'externalptr', regardless of the R attributes that they might have.

In order to duplicate a booster in such a way that the copy wouldn't share the same 'externalptr', one can use function xgb.copy.Booster().

See Also

xgb.copy.Booster()

Examples

Run this code
library(xgboost)

data(mtcars)

y <- mtcars$mpg
x <- as.matrix(mtcars[, -1])

model <- xgb.train(
  params = xgb.params(nthread = 1),
  data = xgb.DMatrix(x, label = y, nthread = 1),
  nrounds = 3
)

model_shallow_copy <- model
xgb.is.same.Booster(model, model_shallow_copy) # same C object

model_deep_copy <- xgb.copy.Booster(model)
xgb.is.same.Booster(model, model_deep_copy) # different C objects

# In-place assignments modify all references,
# but not full/deep copies of the booster
xgb.attr(model_shallow_copy, "my_attr") <- 111
xgb.attr(model, "my_attr") # gets modified
xgb.attr(model_deep_copy, "my_attr") # doesn't get modified

Run the code above in your browser using DataLab