J'ai un code qui crée un objet à partir d'une formule et enregistre l'appel pour une utilisation ultérieure, comme si:appel de fonction d'économie R avec la formule pour les réutiliser dans bootstrapping
create_obj <- function(formula, data) {
obj <- list()
# Populate obj with whatever we're interested in
# ...
# Save call for future use
obj$call <- match.call()
obj
}
obj <- create_obj(time ~ sex, data)
Si je puis bootstrap data
I peut facilement construire le modèle sur le nouveau jeu de données:
data <- data[sample(1:nrow(data), replace=T), ]
new_obj <- eval(obj$call)
Cependant, si je la formule enregistrée dans une variable et je passe l'objet dans un nouvel environnement cela ne fonctionnera pas:
do_stuff <- function(object, newdata) {
data <- newdata[sample(1:nrow(newdata), replace=T), ]
new_object <- eval(object$call)
}
main <- function() {
my_form <- time ~ sex
obj2 <- create_obj(my_form, data)
# obj2$call: 'create_obj(formula = my_form, data = data)'
do_stuff(obj2, data)
}
Erreur: objet my_form
introuvable. Comment puis-je l'avoir pour que obj$call
enregistre time~sex
plutôt que myform
? Sinon, j'ai besoin de passer la formule elle-même plutôt que seulement l'objet, ce qui limite la praticité.
L'exemple ci-dessus n'est pas reproductible mais vous pouvez voir la même chose avec un appel lm
standard.
EDIT: J'ai résolu le problème, voir la réponse acceptée.