54 lines
1.5 KiB
R
54 lines
1.5 KiB
R
% Generated by roxygen2: do not edit by hand
|
|
% Please edit documentation in R/xgb.Booster.R
|
|
\name{xgb.copy.Booster}
|
|
\alias{xgb.copy.Booster}
|
|
\title{Deep-copies a Booster Object}
|
|
\usage{
|
|
xgb.copy.Booster(model)
|
|
}
|
|
\arguments{
|
|
\item{model}{An 'xgb.Booster' object.}
|
|
}
|
|
\value{
|
|
A deep copy of \code{model} - it will be identical in every way, but C-level
|
|
functions called on that copy will not affect the \code{model} variable.
|
|
}
|
|
\description{
|
|
Creates a deep copy of an 'xgb.Booster' object, such that the
|
|
C object pointer contained will be a different object, and hence functions
|
|
like \link{xgb.attr} will not affect the object from which it was copied.
|
|
}
|
|
\examples{
|
|
library(xgboost)
|
|
data(mtcars)
|
|
y <- mtcars$mpg
|
|
x <- mtcars[, -1]
|
|
dm <- xgb.DMatrix(x, label = y, nthread = 1)
|
|
model <- xgb.train(
|
|
data = dm,
|
|
params = list(nthread = 1),
|
|
nround = 3
|
|
)
|
|
|
|
# Set an arbitrary attribute kept at the C level
|
|
xgb.attr(model, "my_attr") <- 100
|
|
print(xgb.attr(model, "my_attr"))
|
|
|
|
# Just assigning to a new variable will not create
|
|
# a deep copy - C object pointer is shared, and in-place
|
|
# modifications will affect both objects
|
|
model_shallow_copy <- model
|
|
xgb.attr(model_shallow_copy, "my_attr") <- 333
|
|
# 'model' was also affected by this change:
|
|
print(xgb.attr(model, "my_attr"))
|
|
|
|
model_deep_copy <- xgb.copy.Booster(model)
|
|
xgb.attr(model_deep_copy, "my_attr") <- 444
|
|
# 'model' was NOT affected by this change
|
|
# (keeps previous value that was assigned before)
|
|
print(xgb.attr(model, "my_attr"))
|
|
|
|
# Verify that the new object was actually modified
|
|
print(xgb.attr(model_deep_copy, "my_attr"))
|
|
}
|