Skip to content

CRAN Release 0.13.1

Compare
Choose a tag to compare
@joshuaulrich joshuaulrich released this 17 Apr 19:31
· 157 commits to main since this release
  • Ignore attribute order in all.equal(). Attribute order shouldn't matter. That can be checked with identical().

  • Add instructions to update old objects. Old xts objects do not have tclass and tzone attributes on the index. Add a function to update the object attributes and add a note to the warning to show how to use it. Also, only call tzone() and tclass() once in check.TZ(). Calling these functions multiple times throws multiple warnings for xts objects created before the tclass and tzone were attached to the index instead of the xts object. (#306)

  • Return 'POSIXct' if object has no 'tclass'. An empty string is not a valid 'tclass', so it can cause an error.

  • Add notes on plot.xts() nomenclature and structure. Also add ASCII art to illustrate definitions and layout. (#103)

  • Register missing S3 methods and update signatures. With R-devel (83995-ish), R CMD check notes these S3 methods are not registered. It also notes that the signatures for as.POSIXct.tis() and str.replot_xts() do not match the respective generics. R CMD check also thinks time.frequency() is a S3 method because time() is a generic. The function isn't exported, so renaming won't break any external code. Thanks to Kurt Hornik for the report. Issues with functionality for 'tis' were also identified. I removed 'tis' support entirely because the implementation was not even a bare minimum, and it's not clear it even worked correctly. (#398)

  • Format each column individually before printing. The top/bottom rows could have a different number of decimal places and there are often multiple variying spaces between columns. For example:

                                close      volume          ma
      2022-01-03 09:31:00     476.470  803961.000          NA
      2022-01-03 09:32:00     476.700  179476.000          NA
      2022-01-03 09:33:00     476.540  197919.000          NA
                      ...
      2023-03-16 14:52:00    394.6000  46728.0000    392.8636
      2023-03-16 14:53:00    394.6500  64648.0000    392.8755
      2023-03-16 14:54:00    394.6500  69900.0000    392.8873

    There are 4 spaces between the index and the 'close' column, 2 between 'close' and 'volume', and 4 between 'volume' and 'ma'. There should be a consistent number of spaces between the columns. Most other classes of objects print with 1 space between the columns. The top rows have 3 decimals and the bottom rows have 4. These should also be the same. (#321)

  • Only convert printed index values to character. Converting the entire index to character is time-consuming for xts objects with many observations. It can take more than a second to print an xts object with 1mm observations.

  • Make column names based on number of columns. The original code was a lot more complicated because it tried to account for truncating the number of printed columns. That functionality was removed because of how complicated it was. So now we can simply create printed column names from the number of columns. (#395)

  • Fix xts() for zero-row data.frame. The xts() constructor would create an object with a list for coredata when 'x' is a data.frame with no rows. It needs to convert 'x' to a matrix and throw an error if 'x' is a list. (#394)

  • Reduce instances when dplyr::lag() warning is shown. The warning was shown whenever it detected dplyr is installed, even if the user wasn't actively using dplyr. That caused an excessive amount of noise when other packages attached xts (e.g. quantmod). Thanks to Duncan Murdoch for the report and suggested fix! (#393)

  • Keep colname when only one non-time-based column. The subset x[, -which.col] would return a vector when the data frame has a time-based column and only one additional column. Do not drop dimensions, so 'x' will still be a data.frame in this case. (#391)

  • Treat NA the same as NULL for start or end values. NULL represents an undefined index value. NA represents an unknown or missing index value. xts does not allow NA as index values. Subsetting an xts or zoo object by NA returns a zero-length object. So a NA (unknown) index value is essentially the same as an undefined index value. (#383, #345)

  • Warn and remove NA when periodicity() called on date-time with NA. Otherwise the uninformative error below will be thrown. (#289)

    Error in try.xts(x, error = "'x' needs to be timeBased or xtsible") :
      'x' needs to be timeBased or xtsible
  • Account for TZ when making names for split.xts(). as.yearmon.POSIXct() always sets tz = "GMT" when calling as.POSIXlt(), regardless of the xts' index tzone. That can cause the as.yearmon() results to be different days for GMT and the index's timezone. Use format.POSIXct() for "months" because it checks for a 'tzone' attribute before converting to POSIXlt and calling format.POSIXlt(). The conversion to POSIXlt is important because it checks and uses the 'tzone' attribute before considering the 'tz' argument. So it effectively ignores the tz = "GMT" setting in as.yearmon(). This is also the reason for calling as.POSIXlt() before calling as.yearqtr(). (#392)