Henrik Bengtsson <hb <at> stat.berkeley.edu> writes: > > The few times I want to patch a function like this, I use: > > unlockBinding(name, env); > assignInNamespace(name, value, ns=pkgName, envir=env); > assign(name, value, envir=env); > lockBinding(name, env); > > /Henrik >
OK, I admit that I don't get it. I eventually managed to figure out that I needed the environment corresponding to getNamespace("package") in this case, not the one corresponding to as.environment("package"), but I still seem to be doing something wrong (perhaps I'm following the recipe too mindlessly). The goal here is to replace a bit of code that uses parent.frame(2) with parent.frame(1) -- that's what my "rjhack.file" does. tstf <- function() { print(environment(jags)) a = grep("get,",deparse(jags),value=TRUE) ## parent.frame(2) length(grep("1",a))>0 } library(R2jags) tstf() rjhack.file <- "~/lib/R/pkgs/mixstock/pkg/inst/myjags.R" source(rjhack.file) ## read hacked version into global workspace tstf() RJ <- getNamespace("R2jags") ## attempt to replace package version with hacked version ... unlockBinding("jags", RJ) assignInNamespace("jags",jags,ns="R2jags", envir=RJ) assign("jags", jags, envir=RJ) lockBinding("jags",RJ) rm(jags) ## get rid of global copy I'm beginning to feel it would be a lot easier to build my own local copy of the package ... in what way am I being a bonehead? library(fortunes) gsub("S4 methods","namespaces",fortune("S4")[1]) thanks Ben Bolker ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.