1Changed in xts 0.12.1: 2 3o Various function could change the tclass of xts objects. This would happen 4 in calls to reclass(), period.apply(), and for logical operations on 5 POSIXct indexes. Thanks to Tom Andrews for the report and testing, and to 6 Panagiotis Cheilaris for contributing test cases (#322, #323). 7 8o plot.xts() now supports y-axis labels via 'ylab'. Thanks to Jasen Mackie 9 for the suggestion and PR (#333, #334). 10 11o The API header has been updated to fix the signatures of do_merge_xts() and 12 is_xts, which did not return a SEXP as required of functions callable by 13 .Call(). Thanks to Tomas Kalibera for the report (#317), and Dirk 14 Eddelbuettel for the PR (#337). This is a breaking change, but is required 15 to avoid the potential for a segfault. 16 17o Michael Chirico added an internal isUTC() function to recognize many UTC- 18 equivalent time zones (#319). 19 20o first() now operates correctly on non-xts objects when 'n = -1'. Previously 21 it would always return the last two values. Thanks to GitHub user vxg20 22 for the report (#325). 23 24o The .xts() constructor would create an xts object with row names if 'x' had 25 row names. This shouldn't happen, because xts objects do not have or 26 support row names (#298). 27 28o Claymore Marshall added many examples of time-of-day subsetting to 29 ?subset.xts. He also fixed a bug in time-of-day subsetting where subsetting 30 by hour only returned wrong results (#304, #326, #328). 31 32Changed in xts 0.12-0: 33 34o All the index-attributes have been removed from the xts object and are now 35 only attached to the index itself (#245). We took great care to maintain 36 backward compatibility, and throw warnings when deprecated functions are 37 called and when index-attributes are found on the xts object. But there 38 still may be some breaking changes lurking in edge cases. 39 40 o @SamoPP found one edge case (#297) where an error was thrown when index() 41 was called on an xts object with an index that had no tclass attribute. 42 o ...which led Joshua to find that the index setting functions did not 43 always copy index attributes (#305). 44 45o Several binary operations (e.g. +, -, !=, <, etc.) on variations of 46 uncommon xts objects with other xts, matrix, or vector objects, could 47 result in malformed xts objects (#295). Some examples of the types of 48 uncommon xts objects: no dim attribute, zero-width, zero-length. 49 50o Calling as.matrix() on an xts object without a dim attribute no longer 51 throws an error (#294). 52 53o merge.xts() now honors check.names = FALSE (#293). 54 55o The possible values for major.ticks, minor.ticks, and grid.ticks.on in the 56 Details section of ?plot.xts have been corrected. Thanks to Harvey Smith 57 (@harvey131) for the report and patch (#291). 58 59o as.zoo.xts() is now only registered for zoo versions prior to 1.8-5. Methods 60 to convert an object to another class should reside in the package that 61 implements the target class. Thanks to Kurt Hornik for the report (#287). 62 63o .parseISO8601() no longer has a potential length-1 logical error. Thanks to 64 Kurt Hornik for the report (#280). 65 66o endpoints() now honors k > 0 when on = "quarters". Thanks to @alkment for 67 the report (#279). 68 69o Performance for the period.XYZ() functions (sum, prod, min, max) is much 70 faster (#278). Thanks to Harvey Smith (@harvey131) for the report and 71 examples. 72 73o merge.xts() now creates shorter column names when passed unnamed objects. 74 This is now consistent with zoo (#248). 75 76o Time-of-day performance is ~200x faster, thanks to StackOverflow 77 user3226167 (#193). 78 79Changed in xts 0.11-2: 80 81o The to.period() family of functions now use the index timezone when 82 converting intraday index values to daily values (or lower frequency). 83 Thanks to Garrett See and Gabor Grothendieck for the reports (#53, #277). 84 85o Make column names for merge() results with unnamed objects shorter and more 86 like zoo (#248). This also makes na.fill() much faster (#259). 87 BREAKING: This may break existing code for integer unnamed objects. 88 89o Fix subset when 'index(x)' and 'i' contain duplicates. Thanks to Stack 90 Overflow user 'scs' (https://stackoverflow.com/users/4024268/scs) for the 91 report, and Philippe Verspeelt for debugging (#275). 92 93o Fix if-statement in xts constructor that may use a logical with length > 1. 94 Thanks to @HughParsonage for the report and PR (#270, #272). 95 96o Register shift.time.xts() method. Thanks to Philippe Verspeelt for the 97 report and PR (#268, #273). 98 99o Conditionally register S3 methods for as.timeSeries.xts() and as.fts.xts() 100 when their respective packages are available (as requested by CRAN). Note 101 that this means these two functions are no longer exported. This may break 102 some existing code that calls the methods directly, though 'best practice' 103 is to let method dispatch determine which method to invoke. 104 105Changed in xts 0.11-1: 106 107o Fix regression in .xts() that caused 'tclass' argument/attribute to be 108 incorrectly set to POSIXct regardless of user-provided value. Thanks to 109 @Eluvias for the report and Tom Andrews for the PR (#249, #250). 110 111o Fix performance regression when xts object is subset by a date-time vector. 112 Thanks to Tom Andrews for the report, and the PR to fix the bug in my patch 113 (#251, #263, #264). 114 115o Restore behavior from 0.10-2 so subsetting an empty xts object by a date- 116 time vector returns an empty xts object instead of throwing an error. 117 Thanks to @alkment for the report (#252). 118 119o Add ability for merge.xts() to handle multiple character or complex xts 120 objects. Thanks to Ken Williams for the report (#44). 121 122o Add ability to use "quarters" to specify tick/grid mark locations on plots. 123 This ran but produced an incorrect result in 0.10-2 and threw an error in 124 0.11-0. Thanks to Marc Weibel for the report (#256). 125 126o Fix illegal read reported by valgrind. Thanks to Tom Andrews for the report 127 and PR (#236, #264). 128 129Changed in xts 0.11-0: 130 131o Fix make.index.unique() to always return a unique and sorted index. Thanks 132 to Chris Katsulis for the report and example (#241). 133 134o Add window.xts() method and completely refactor the internal binary search 135 function it depends on. Thanks to Corwin Joy for the PR, tests, review, and 136 patience (#100, #240). 137 138o Better axis tick mark locations for plots. Thanks to Dirk Eddelbuettel for 139 the report (#246). Also incorporate axTicksByTime2() into axTicksByTime() to 140 reduce code duplication from the migration of quantmod::chart_Series() to 141 xts::plot.xts() (#74). 142 143o Add details to plot.xts() parameters that are periodicity, now that RStudio 144 has argument completion. Thanks to Evelyn Mitchell for the PR (#154). 145 146o periodicity() now warns instead of errors if the xts object contains less 147 than 2 observations (#230). 148 149o first() and last() now keep dims when they would otherwise be dropped by a 150 regular row subset. This is consistent with head() and tail(). Thanks to 151 Davis Vaughan for the report (#226). 152 153o Fix subset when ISO8601 string is outside the valid range, so it returns no 154 data instead of all rows (#96). 155 156o Avoid partial name matches from parse.side() (inside .parseISO8601()) 157 results that are passed to firstof() and lastof(). Thanks to @gp2x for the 158 report and the patch (#231). 159 160o na.locf.xts() now loops over columns of multivariate objects in C code, 161 instead of in R. This should improve speed and memory performance. Thanks to 162 Chris Katsulis and Tom Andrews for their reports and patches (#232, #233, 163 #234, #235, #237). 164 165o Change plot.xts() default 'pch = 0' (rectangles) to 'pch = 1' (circles) so 166 it looks more like base and zoo plots (#203). 167 168Changed in xts 0.10-2: 169 170o na.locf.xts() and na.omit.xts() now support character xts objects. Thanks to 171 Ken Williams and Samo Pahor for the reports (#42). 172 173o na.locf.xts() now honors 'x' and 'xout' arguments by dispatching to the next 174 method (#215). Thanks to Morten Grum for the report. 175 176o coredata.xts() now functions the same as coredata.zoo() on zero-length 177 objects, and only removes xts-related attributes (#223). Thanks to Vincent 178 Guyader for the report. 179 180o plot.xts() no longer ignores 'col.up' and 'col.dn' when 'type="h"' (#224). 181 Thanks to Charlie Friedemann for the report. This was inadvertently broken 182 as part of the fix for #210. 183 184Changed in xts 0.10-1: 185 186o 'ylim' values passed to 'addSeries' and 'addPolygon' via '...' are now 187 captured and honored (#220). 188 189o 'addPolygon' now checks for ylim of zeros, as 'addSeries' does (#164). 190 191o The 'base::as.Date.numeric' method is no longer over-ridden. The exported, 192 but not registered, method in zoo should prevent any change in behavior. 193 194o Series added to an existing plot are now given the same index values as 195 the main panel (#216). There still may be some weird behavior if the new 196 data does not have observations within the timespan of the main panel data, 197 but no observations on the same timestamps. 198 199o Existing 'par' values are now captured and reset before returning from 200 plotting functions (#217). 201 202o User-defined 'col' values are now honored when 'type="h"' (#210). 203 204o Values passed to plotting functions are now copied from the calling 205 environment. This enables plotting arguments to be objects passed 206 through multiple layers of function calls. 207 208o indexFormat is now generic, consistent with indexFormat<- (#188). 209 210o Calling as.matrix() on a zero-width xts object now behaves consistently 211 with zoo, and no longer throws an error (#130). 212 213o Fix weird result in merge.xts() when 'fill' argument is NULL or a zero- 214 length vector (#261). 215 216o Fixed bug in endpoints() due to sub-second representation error via using 217 integer division (%/%) with non- integer arguments (#202). 218 219o endpoints() gained sub-second accuracy on Windows (#202). 220 221o plot.xts() no longer errors when called on an object containing a constant 222 value. It chooses ylim values +/-20% from the series value (#156). 223 224o plot.xts() now places y-axis labels in the same location on the plot, 225 regardless of data periodicity (#85). 226 227o rbind.xts() now throws an error if passed an xts object with different 228 number of observations in the index and data (e.g., zero-width) (#98). 229 230Changed in xts 0.10-0: 231 232Major changes include: 233o A new plot.xts() that is incompatible with earlier versions of plot.xts(). 234o Moved development from R-Forge to GitHub. 235o New xts FAQ. 236 237Other, less disruptive changes include: 238 239o merge.xts() now throws an error if the index contains non-finite values 240 (#174). 241 242o Constructors xts() and .xts() now ensure order.by and index arguments do not 243 contain non-finite values. Many xts functions, most notably merge.xts(), 244 expect all index values to be finite. Missing index values usually indicate 245 an error, and always occurred at the end of the index (#173, #194, #199). 246 247o Fixed bug in endpoints() when called on sparse data that have the same month 248 and day, but different years (#169). 249 250o Fixed bug in [.xts did not do the same checks on logical xts objects as it 251 does for all other data types (#163). 252 253o Fixed bug that caused split.xts() to error if 'f' is a character vector with 254 more than 1 element (#134). 255 256o Fixed bug that crashed R if 'k' argument to lag.xts() was not an integer and 257 would be NA when coerced to integer (#152). 258 259o period.apply() now checks to ensure the object's index is unique and sorted, 260 and sets INDEX <- sort(unique(INDEX)) if it is not. It also ensures INDEX 261 starts with 0 and ends with NROW(x) (#171). 262 263o All references to the 'its' package have been removed, since it is now 264 archived on CRAN at the request of its maintainer. 265 266o Fixed bug that crashed R when merge.xts() was called on an empty xts object 267 and more than one non-xts object (#157). 268 269o Fixed bug that did not set the index's tzone attribute to UTC when 270 index<-.xts or indexClass<- were called and 'value' did not have a tzone 271 attribute (#148). 272 273o Fixed a bug in endpoints() that caused incorrect results if the index was 274 less than the epoch (#144). 275 276o Fixed a bug that caused diff.xts() on a logical xts object to return an 277 object with a POSIXct index. 278 279o index.xts() works even if the package containing the class for the index 280 is not attached (it needs to be loaded, however). 281 282o [.xts now returns NA if a one-column xts object is subsect by NA, instead 283 of throwing an uninformative error (#97). 284 285o Fixed bugs that would crash R when [.xts was called a certain way and 'j' 286 contained NA values (#97, #181). 287 288o Fixed a bug in endpoints() where 1 second would be subtracted for any date 289 in the year 1969. The subtraction is only supposed to occur on 290 1969-12-31 23:59:59.9... to work around behavior in strptime(). 291 292o timeBasedSeq() now honors hour/min/sec 'BY' values (#91). 293 294o [.xts now throws an error if 'j' is character and not one of the column 295 names. This is consistent with [.zoo and [.matrix (#48). 296 297o timeBasedSeq() now works correctly when resolution is "days" the sequence 298 includes a daylight saving time change (#67). 299 300o Explicitly set indexTZ="UTC" for all index classes that do not have a TZ 301 (#66). indexTZ="GMT" is also allowed. 302 303o Fixed as.xts() when called on an 'mts' object (#64). 304 305o Moved development from R-Forge to GitHub. 306 307o Fixed bug in to.period() that errored when name=NULL (#5937). 308 309o Fixed bug in .index* functions that did not account for timezones (#5891). 310 311o Fixed bug that allowed index<-.xts to produce an unsorted index (#5893). 312 313o Fixed bug so subsetting a zero-width xts object with a zero-length 'i' 314 vector no longer returns an object with column names (#5885). 315 316o Updated [.xts to handle 'i' containing multiple zeros (e.g. subsetting by a 317 "logical" column of an integer xts object). 318 319o endpoints() now errors if k < 0. 320 321Changed in xts 0.9-7: 322 323o Fixed bug that caused logical operators on xts objects to drop the 'tzone' 324 attribute (#2750). 325 326o Fixed bug that ignored 'which.i' argument to [.xts on zero-width xts 327 objects (#2753). 328 329o Fixed bug where xts() does not sort 'order.by' if x is missing (#4775). 330 331Changed in xts 0.9-6: 332 333o Fixed bug where setting dimnames to NULL would break as.xts() (#4794). 334 335o Added checks to period.sum/prod/min/max to ensure INDEX is in [0,nrow(x)]. 336 337o Fixed missing argument to na_locf() in the C/C++ xtsAPI (Dirk Eddelbuettel). 338 339Changed in xts 0.9-5: 340 341o Increased zoo dependency version to 1.7-10 for changes in C code. 342 343o Fixed several minor issues in the C/C++ xtsAPI (Dirk Eddelbuettel). 344 345Changed in xts 0.9-4: 346 347o Fixed bug where the index was missing the 'tzone' attribute. 348 349o Fixed to.period() bug when 'indexAt' is "firstof" or "lastof". (bug #2691, 350 patch #2710, thanks to Garrett See) 351 352o Fixed subsetting bug on zero-width xts objects that returned NA data and an 353 NA index (#2669). 354 355o xts' merge() method now has 'drop' and 'check.names' arguments to match 356 the zoo merge() method. 357 358o 'index<-' now correctly handles UTC Date objects when resetting index 359 values. '.index<-' behaved correctly. 360 361o xts' rollapply() method now handles the 'fill' argument. 362 363o Added several functions to the C/C++ API: 364 - make_index_unique 365 - make_unique 366 - endpoints 367 - do_merge_xts 368 - na_omit_xts 369 - na_locf 370 371o Fixed xts' rollapply() method when input has one column, but function 372 output has more than one column. 373 374Changed in xts 0.9-3: 375 376o No user-visible changes. 377 378Changed in xts 0.9-2: 379 380o Added C/C++ xtsAPI (Dirk Eddelbuettel) 381 382o Added tzone() and tclass() functions as aliases to indexTZ() and 383 indexClass(), respectively. Eventually will Deprecate/Defunct the former. 384 385Changed in xts 0.9-1: 386 387o xts() now ignores timezone arguments when order.by is Date class, with a 388 warning. 389 390Changed in xts 0.8-8: 391 392o Modified str() output to make use of proper ISO-8601 range formating 393 394o Fixed bug in reclass() when 'tzone' of object is different than system TZ. 395 396o Fixed bug in xts() that dropped dims when 'x' is a 1-column matrix or 397 data.frame. 398 399o [.xts no longer warns if 'i' is zero-length. 400 401o to.period() now checks that 'x' is not zero-length/width. 402 403o Fixed edge case in Ops.xts where two objects with no common index create 404 an invalid 'xts' object with no index. 405 406o to.monthly() and to.quarterly() now default to drop.time=TRUE. 407 408o Internal .drop.time() now changes the index class to Date. This affects 409 the to.period() family of functions. 410 411o Restore Date index/tclass conversion to POSIXct with a UTC timezone via 412 integer division instead of double-precision division. 413 414Changed in xts 0.8-6: 415 416o Revert Date index/tclass conversion to POSIXct with a UTC timezone to 417 previous behavior as in 0.8-2. 418 419Changed in xts 0.8-5: 420 421o A Date index/tclass is now internally converted to POSIXct with a UTC 422 timezone ensure proper conversion regardless of user TZ settings. 423 424o tclass is now an argument to .xts() 425 426o Fix endpoints() properly handles millisecond time stamps (and microsecond 427 on not Windows). 428 429o Subsetting zero-width xts objects now behaves like zoo, with NA values 430 returned for valid row requests. 431 432Changed in xts 0.8-2: 433 434o Fixed bug in lag() and diff() for character coredata. 435 436o Fixed subsetting bug that returned a contiguous chunk of data even when 437 a non-contiguous 'i' was provided. 438 439o Fixed bug that ignored FinCenter/TZ for timeDate index 440 441o period.apply() now only sets colnames if the number of columns in the input 442 and output are equal. 443 444o Fixed periodicity() when scale = "yearly" 445 446o Fixed [.xts when row-subsetting via a POSIXct vector, which returned an 447 object full of NA. 448 449o Added '...' to axis() call inside of plot.xts() to allow for 'cex.axis' 450 and 'cex.lab' to be passed in. 451 452o Fixed axes=FALSE issue in plot.xts(). 453 454o Dependency now on 1.7-0 or better of zoo (R-forge at present) 455 This build now links to C code moved from xts to zoo. At present 456 this is only for zoo_lag (used in lag and lagts) 457 458o Added 'drop' and 'fromLast' arguments to make.index.unique(). 459 460o Added adj.time() and shift.time() 461 462o Fixed na.locf() bug that would fill trailing NA larger than 'maxgap' 463 observations (#1319) 464 465o Updated indexFormat() documentation and add an example 466 467Changed in xts 0.8-0: 468 469o Fix print formatting (#1080) 470 471o Fix bug related to na.locf() and zero-width objects (#1079) 472 473o Add .RECLASS = FALSE after '...' for as.xts.*() methods. This makes all 474 as.xts.*() methods one-way (i.e. not reclass-able). Objects converted to 475 xts via try.xts() can still be converted back to their original class 476 via relcass(). 477 478o Fix bug that caused colnames to be dropped if object is subset by time 479 that is not in the index. 480 481Changes in xts 0.7-5: 482 483o try.xts and reclass now are more efficient on xts objects, 484 no longer appending a .RECLASS attribute. This penalty 485 (copying) is shifted to classes that are internally converted 486 to xts. 487 488Changes in xts 0.7-4: 489 490o internal attributes of index are now maintaining 491 timezone (tzone), time class (tclass) information. 492 493o `[.xts` method is now using new C code. This may revert 494 back as character-based objects are not supported. Changed 495 for future code refactoring into zoo, as well as performance 496 gains on integer, double and logical values. Also added in 497 checks for NAs. drop=TRUE now works correctly in all known 498 applications. 499 500o (cbind)merge.xts and rbind.xts now copy index attributes 501 to handle internal changes to index characteristics (in C code) 502 503o indexTZ.Rd updated to provide information regarding internal 504 changes. Also indexTZ<- is now exported to facilitate 505 timezone changing of xts objects. 506 507Changes in xts 0.7-1: 508 509o subsecond ISO8601 subsetting on dates 510 before 1970 (epoch) is disabled. This is due to a bug 511 in the R implementation of POSIX handling of fractional 512 seconds pre-1970. 10 microsecond granularity is still 513 functional for all other times. Thanks to Andreas Noack Jensen 514 for the early bug report. 515 516o new 'tzone' arg in xts constructor and 'tz' in .parseISO8601 517 allows for future support of non-system TZ dependent indexing 518 519o internal index attribute (numeric) now can have attributes 520 set (tzone is currently the only one used in xts). These should 521 remain during all xts operations. Still experimental. 522 523o naCheck has been exposed at the C level for use in packages 524 "LinkingTo: xts". See ?xtsAPI for more details. 525 526Changes in xts 0.7-0: 527 528o A new NEWS file. 529 530o print.xts now passes ... 531 532o endpoints speedup and bug fix (thanks Ismail Onur Filiz) 533 534o na.omit bug on logical and NaN fixes (thanks Fabrizio Pollastri 535 and Koert Kuipers) 536 537o fromLast=FALSE for na.locf.xts. Matching to zoo. (thanks 538 to Sandor Benczik) 539 540o LGLSXP support in leadingNA (R fun naCheck) 541 542o fixed logical and NA 'j' subsetting. Thanks Koert Kuipers. 543 544o as.xts and as.timeSeries fixes for timeSeries changes 545 546o merge and subset now support dimensionless xts (non-standard). 547 merge segfault fixed when merging all 3 or more zero-width xts objects 548 and only zero-width objects. Thanks to Koert Kuipers for the report. 549 550o added which.i to [.xts to return i values found via 551 ISO8601 subset string 552 553o new lines.xts and plot.xts, similar to methods in zoo 554 555o lastof now has sec to 10 microsecond precision, and subsec 556 arg to append to secs. 557 558o xts() further consistency in NROW/index check 559 560o align.time error checks for positive n= values (thanks Brian Peterson) 561 562o toPeriod updates in C, almost exported. ~600-1200x faster 563 564o new lag_xts in C. Increased speed and index flexibility. 565 566o endpoints 'days' bug fix 567 568o .makeISO8601 function to create ISO8601 compliant string 569 from xts objects 570