Hi Russ,

Colnames don't get rewritten if they already exist. The reason is due to performance and how cbind is written at the R level. 

It isn't perfect per se, but the complexity and variety of dispatch that can take place for cbind in R, as it isn't a generic, is quite challenging to get to behave as one may hope.  After years of trying I'd say it is nearly impossible to do what you want without causing horrible memory issues on non trivial objects they are use in production systems **using** xts on objects with billions of rows.  Your simple case that has a simple workaround would cost everyone using in the other 99.999% of cases to pay a recurring cost that isn't tolerable. 

If this is frustrating to you you should stop using the class. 

Jeff

Jeffrey Ryan    |    Founder    |    jeffrey.ryan@lemnica.com

www.lemnica.com

On May 8, 2011, at 2:07 PM, Russ Abbott <russ.abbott@gmail.com> wrote:

> I'm having troubles with the names of columns.
> 
> quantmod deal with stock quotes.  I've created an array of the first 5 closing prices from Jan 2007. (Is there a problem that the name is the same as the variable name? There shouldn't be.)
> 
> 
> > close
> 
> 
> 
>              close
> 
> 2007-01-03 1416.60
> 
> 2007-01-04 1418.34
> 
> 2007-01-05 1409.71
> 
> 2007-01-08 1412.84
> 
> 2007-01-09 1412.11
> 
> When I try to create a more complex array by adding columns, the names get fouled up.  Here's a simple example.
> 
> 
> 
> > cbind(changed.close = close+1, zero = 0, close)
> 
> 
> 
> 
>              close zero close.1
> 
> 
> 2007-01-03 1417.60    0 1416.60
> 
> 
> 2007-01-04 1419.34    0 1418.34
> 
> 
> 2007-01-05 1410.71    0 1409.71
> 
> 
> 2007-01-08 1413.84    0 1412.84
> 
> 
> 2007-01-09 1413.11    0 1412.11
> 
> The first column should be called "changed.close", but it's called "close". The second column has the right name. The third column should be called "close" but it's called "close.1". Why is that? Am I missing something?
> 
> If I change the order of the columns and let close have its original name, there is still a problem.
> 
> 
> > cbind(close, zero = 0, changed.close = close+1)
> 
> 
> 
>              close zero close.1
> 
> 2007-01-03 1416.60    0 1417.60
> 
> 2007-01-04 1418.34    0 1419.34
> 
> 2007-01-05 1409.71    0 1410.71
> 
> 2007-01-08 1412.84    0 1413.84
> 
> 2007-01-09 1412.11    0 1413.11
> 
> Now the names on the first two columns are ok, but the third column is still wrong. Again, why is that?  Apparently it's not letting me assign a name to a column that comes from something that already has a name.  Is that the way it should be?
> 
> I don't get that same problem on a simpler example.
> 
> 
> 
> > IX <- cbind(I=0, X=(1:3))
> > IX
> 
>      I X
> 
> [1,] 0 1
> 
> [2,] 0 2
> 
> [3,] 0 3
> 
> > cbind(Y = 1, Z = IX[, "I"], W = IX[, "X"])
> 
>      Y Z W
> 
> [1,] 1 0 1
> 
> [2,] 1 0 2
> 
> [3,] 1 0 3
> 
> Is this a peculiarity to xts objects?
> 
> Thanks.
>  
> -- Russ 
> 
> P.S. Once again I feel frustrated because it's taken me far more time than it deserves to track down and characterize this problem. I can fix it by using the names function. But I shouldn't have to do that.  

	[[alternative HTML version deleted]]

