Peter Dalgaard wrote:

Patrick Burns <[EMAIL PROTECTED]> writes:



The assignment form of 'formals' strips attributes (or something close
to that) from the values in the list.  This wasn't intentional, was it?

The current behavior (2.0.0 through 2.1.0 on Windows at least):

> fjj <- function() x
> formals(fjj) <- list(x=c(a=2, b=4))
> fjj
function (x = c(2, 4))
x


Previous behavior:

> fjj <- function() x
> formals(fjj) <- list(x=c(a=2, b=4))
> fjj
function (x = structure(c(2, 4), .Names = c("a", "b")))
x



It is only a buglet in deparsing:



formals(fjj)


$x
a b
2 4


fjj()


a b
2 4


But the buglet gets more aggressive if you edit the function:

> fjj <- function() x
> formals(fjj) <- list(x=c(a=2, b=4))
> fjj
function (x = c(2, 4))
x
> fjj()
a b
2 4
> fix(fjj) # do nothing but save
> fjj()
[1] 2 4

I'm quite sure that I wouldn't have noticed if my real function were
not broken.

Now I know that my functions will work if I assign the formals after I edit the
function -- even though they look like they shouldn't work.




as.list(fjj)


$x
a b
2 4

[[2]]
x

BTW, why is it that we cannot deparse named vectors nicely?


deparse(c(a=1,b=2))


[1] "structure(c(1, 2), .Names = c(\"a\", \"b\"))"


deparse(as.list(c(a=1,b=2)))


[1] "structure(list(a = 1, b = 2), .Names = c(\"a\", \"b\"))"

Notice also that fjj constructed as above is not identical to

function (x = c(a = 1, b = 2))
x

since the default expression is a vector in one case and  a call to "c"
in the other. This is part of the problem; you're trying to deparse
something that cannot be the result of parsing. (The existence of such
objects is a generic problem in the R (and S) language).




______________________________________________ R-devel@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to