Hi Jeff, The xts class has some very nice features, and you have done a valuable service in developing it.
My primary frustration is how difficult it seems to be to find out what went wrong when my code doesn't work. I've been writing quite sophisticated code for a fairly long time. It's not that I'm new to software development. The column name rule is a good example. I'm willing to live with the rule that column names are not changed for efficiency sake. What's difficult for me is that I never saw that rule anywhere before. Of course, I'm not an R expect. I've been using it for only a couple of months. But still, I would have expected to run into a rule like that. Worse, since the rule is in conflict with the explicit intent of cbind--one can name columns when using cbind; in fact the examples illustrate how to do it--it would really be nice of cbind would issue a warning when one attempts to rename a column in violation of that rule. Instead, cbind is silent, giving no hint about what went wrong. It's those sorts of things that have caused me much frustration. And it's these sorts of things that seem pervasive in R. One never knows what one is dealing with. Did something not work because there is a special case rule that I haven't heard of? Did it not work because a special convenience was programmed into a function in a way that conflicted with normal use? Since these sorts of things seem to come up so often, I find myself feeling that there is no good way to track down problems, which leads to a sense of helplessness and confusion. That's not what one wants in a programming language. -- Russ On Sun, May 8, 2011 at 2:42 PM, Jeff Ryan <jeff.a.r...@gmail.com> wrote: > 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.r...@lemnica.com> > jeffrey.r...@lemnica.com > > www.lemnica.com > > On May 8, 2011, at 2:07 PM, Russ Abbott <russ.abb...@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]] ______________________________________________ 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.