检查两个增强器对象是否引用相同的底层 C 对象。
详细信息
由于增强器对象(例如由 xgb.train() 返回)包含一个 R 'externalptr' 对象,它们不遵循其他 R 对象的典型写时复制语义——也就是说,如果将一个增强器分配给一个不同的变量并通过 xgb.attr<-() 等原地方法修改该新变量,则修改将应用于旧变量和新变量,这与只会修改后者的典型 R 赋值不同。
此函数允许检查两个增强器对象是否共享相同的 'externalptr',无论它们可能具有哪些 R 属性。
为了以复制不会共享相同 'externalptr' 的方式复制增强器,可以使用函数 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