On 12-02-06 4:12 PM, Hadley Wickham wrote:
2. It's more flexible to construct the language object as a language object,
rather than pasting something together and parsing it.  For one thing, that
allows non-syntactic variable names; I think it's also easier to read.  So
your code

txt<- paste("tabular(value*v*", LEFT , "~" ,RIGHT ,", data = m_xx,
suppressLabels  = 2,...)", sep = "")
eval(parse(text = txt ))

could be rewritten as

formula<- substitute( value*v*LEFT ~ RIGHT, list(LEFT=LEFT, RIGHT=RIGHT))
tabular(formula, data = m_xx, suppressLabels = 2, ...)

To be strictly correct, shouldn't that be:

formula<- eval(substitute( value*v*LEFT ~ RIGHT, list(LEFT=LEFT, RIGHT=RIGHT)))

?

I think it probably doesn't matter. The difference is that mine gives a pure language object, whereas yours gives a formula object. The formula object has a class which means some methods will work differently, and it also has an environment attached, which defines where the variables in it should be resolved. I suspect the variables shouldn't be resolved in the environment where "formula" was being created, so it's probably better not to attach an environment at all, but the tabular function ignores the environment of the formula (it uses its data argument for that), so it doesn't make a big difference.


It might make sense to put something like this into the tables package, but
I don't want to have a dependency on reshape.

Would you consider making tabular generic?

Yes, that wouldn't cost much.

Duncan Murdoch

______________________________________________
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.

Reply via email to