% 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")) }