[R] Bug in "transform"?
Peter Dalgaard
p.dalgaard at biostat.ku.dk
Wed Dec 3 10:37:49 CET 2008
Prof Brian Ripley wrote:
> On Tue, 2 Dec 2008, Peter Dalgaard wrote:
>
>> Prof Brian Ripley wrote:
>>> As the help page says
>>>
>>> If some of the values are not vectors of the appropriate length,
>>> you deserve whatever you get!
>>
>> Yes (did I write that?). It is a bit annoying with things that almost
>> work, though.
>>
>>
>> [snip]
>>>
>>>> I often need to use this for creating new variables in data frame
>>>> from those already present.
>>>> Sorely needed!!
>>>
>>> Just learn to use indexing: transform() is just syntactic sugar that
>>> you are not making use of.
>>>
>>
>> ...at least when you're not making use of the scoping aspects. And if
>> you calculate at least one vector of full length, then the issue goes
>> away.
>>
>>
>>
>>> transform(aq, a=1,b=2)
>> Error in data.frame(`_data`, e[!matched]) :
>> arguments imply differing number of rows: 6, 1
>>> transform(aq, a=1,b=2,o=Ozone)
>> Ozone Solar.R Wind Temp Month Day a b o
>> 3 12 149 12.6 74 5 3 1 2 12
>> 31 37 279 7.4 76 5 31 1 2 37
>> 34 NA 242 16.1 67 6 3 1 2 NA
>> 65 NA 101 10.9 84 7 4 1 2 NA
>> 59 NA 98 11.5 80 6 28 1 2 NA
>> 133 24 259 9.7 73 9 10 1 2 24
>>
>>
>>
>> The underlying issue is actually not in transform() but in data.frame():
>
> Well, no, it is in the way that you call data.frame(). If you want to
> add several variables, pass them as separate arguments rather than as a
> list (just as they were passed to transform.data.frame). That's a
> simple change and will make transform.data.frame behave more
> consistently with cbind.data.frame and data.frame.
>
Hmm, you could well be right there. Not quite a simple spot change,
though. As far as I see, either it needs do.call, or maybe there is a
much more radical simplification possible. I'll have a look.
BTW, we have a deparser bug:
> transform
function ("_data", ...)
UseMethod("transform")
<environment: namespace:base>
> function ("_data", ...)
Error: unexpected string constant in "function ("_data""
....
> f <- function (`_data`, ...) {}
> attr(f,"source")<-NULL
> f
function ("_data", ...)
{
}
It should deparse with backticks, not the old-style quotes (did that
ever work?).
--
O__ ---- Peter Dalgaard Øster Farimagsgade 5, Entr.B
c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K
(*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
More information about the R-help
mailing list