Re: [R] Change in how R handles assignments?

About this list Date view Thread view Subject view Author view Attachment view

From: Prof Brian Ripley (ripley@stats.ox.ac.uk)
Date: Tue 18 May 2004 - 00:44:17 EST


Message-id: <Pine.LNX.4.44.0405171525540.14150-100000@gannet.stats>

Note, this is how R handles `replacement subsetting of data frames'.

On Mon, 17 May 2004, David Kreil wrote:

> I have been using the following code in earlier versions of R:

What `earlier versions'? As far as I know this was changed in 1.8.0.

> q[,names(info)]<-info[no,];

You do not need to terminate lines in ;, BTW.

> with
>
> > class(info)
> [1] "data.frame"
> > class(q)
> [1] "data.frame"
> > dim(q)
> [1] 7488 68
> > dim(info)
> [1] 12 8
> > dim(info[no,])
> [1] 1 8
>
> The column names(info) did not exist in q before the assignment.
>
> What used to happen (as intended) was that they would be created, and each of
> the 7488 rows would be set the same value, info[no,].

But that was not what was documented. The intention is that the rhs be a
list, not a data frame.

> Now, in the current version of R this gives the error:
>
> Error in "[[<-.data.frame"(`*tmp*`, k, value = rep(value[[k]], len = n)) :
> replacement has 7488 rows, data has 1
>
> I can use the following as a workaround
>
> for (n in names(info))
> q[,n]<-info[no,n];
>
> but it seems clunky. Is there a more elegant/simple way to do the same thing
> in the current version of R? It seems I'm unintentionally forcing it to do
> something it doesn't "like".

Here's a simple example that does the same in 1.8.0 as R-patched:

x <- data.frame(a=1:3, b=4:6, c=7:9)
info <- x[1:2]
x[, names(info)] <- info[1, ]

You can do
x[, names(info)] <- info[rep(1,3), ]
or
x[, names(info)] <- unclass(info[1, ])

We'll unclass a data frame rhs internally in future.

-- 
Brian D. Ripley,                  ripley@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

______________________________________________ R-help@stat.math.ethz.ch mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html


About this list Date view Thread view Subject view Author view Attachment view

This archive was generated by hypermail 2.1.3 : Mon 31 May 2004 - 23:05:11 EST