[R] bug: Editing function formals deletes the environment

Alex Brown alex at transitive.com
Fri Oct 13 12:19:31 CEST 2006


First, here's the specific bug I have.  Later I'll say why I care.

 > ls(zappo)
Error in try(name) : object "zappo" not found
# good.
 > f = function(zappo) { function(y) zappo + y }
 > g = f(1)
 > g(1)
[1] 2

 > formals(g)
$y

 > formals(g)$y
 > formals(g)$y = 2
 > g
function (y = 2)
zappo + y
 > g(1)
Error in g(1) : object "zappo" not found

# looks like formals strips the environment off stuff.

anything I can do about this?

-Alex


Original question:

I'm trying to change the behaviour of a package, to simplify the  
interface.

I'd rather not change the package, although I could.

There's a hidden function whose defaults I wish to change.

I'm using R 2.3.1 for macosX.  Upgrading is not an option.

This is what I do:

library(R2HTML)

# get the function to modify
x = getFromNamespace("HTML.data.frame", "R2HTML")
# change the default for an argument
formals(x)["Border"]=list(NULL)
# put the function back
assignInNamespace("HTML.data.frame", x, "R2HTML")

#test the function:

HTML(data.frame(1:2), file=stdout())

Error: could not find function "HTMLReplaceNA"

# what seems to be happening is that the formals function is  
stripping the namespace off the variable x.  I can't tell why.



More information about the R-help mailing list