跳到内容

检查两个 booster 对象是否引用了同一个底层 C 对象。

用法

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

参数

obj1

要与 obj2 比较的 Booster 模型。

obj2

要与 obj1 比较的 Booster 模型。

返回值

根据两个 booster 是否共享底层 C 对象,返回 TRUEFALSE

详细信息

由于 booster 对象(例如由 xgb.train() 返回的对象)包含一个 R 'externalptr' 对象,它们不遵循其他 R 对象的典型写时复制 (copy-on-write) 语义——也就是说,如果将一个 booster 赋值给不同的变量,并通过 xgb.attr<-() 等就地修改方法来修改这个新变量,修改将同时应用于旧变量和新变量,这与只修改后者的典型 R 赋值不同。

此函数允许检查两个 booster 对象是否共享同一个 'externalptr',而不管它们可能具有的 R 属性。

为了以复制不会共享同一个 'externalptr' 的方式复制一个 booster,可以使用函数 xgb.copy.Booster()

另请参阅

示例

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