[R] Bug in "transform"?
Prof Brian Ripley
ripley at stats.ox.ac.uk
Wed Dec 3 10:00:01 CET 2008
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.
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-help
mailing list