An earlier post illustrated that R object attributes can be set at the C++ level. Naturally, we can also read them from an object. This proves particularly useful for xts objects which are, in essence, numerical matrices with added attributed that are used by a rich set of R operators and functions.
Here, we show how to access these attributes.
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
std::vector<std::string> xtsAttributes(NumericMatrix X) {
std::vector<std::string> nm = RObject(X).attributeNames();
return nm;
}
A first example simply creates a random xts object of twenty observations. We then examine the set of attributes and return it in a first program.
suppressMessages(library(xts))
set.seed(42)
n <- 20
Z <- xts(100+cumsum(rnorm(n)), order.by=ISOdatetime(2013,1,12,20,21,22) + 60*(1:n))
xtsAttributes(Z)
[1] "dim" "index" "class" ".indexCLASS" "tclass" [6] ".indexTZ" "tzone"
The same result is seen directly in R:
names(attributes(Z))
[1] "dim" "index" "class" ".indexCLASS" "tclass" [6] ".indexTZ" "tzone"
all.equal(xtsAttributes(Z), names(attributes(Z)))
[1] TRUE
Now, given the attributes we can of course access some of these. The index() function xts objects returns the index. Here, we know we have a Datetime object so we can instantiate it at the C++ level. (Real production code would test types etc).
// [[Rcpp::export]]
DatetimeVector xtsIndex(NumericMatrix X) {
DatetimeVector v(NumericVector(RObject(X).attr("index")));
return v;
}
xtsIndex(Z)
[1] "2013-01-12 20:22:22 CST" "2013-01-12 20:23:22 CST" [3] "2013-01-12 20:24:22 CST" "2013-01-12 20:25:22 CST" [5] "2013-01-12 20:26:22 CST" "2013-01-12 20:27:22 CST" [7] "2013-01-12 20:28:22 CST" "2013-01-12 20:29:22 CST" [9] "2013-01-12 20:30:22 CST" "2013-01-12 20:31:22 CST" [11] "2013-01-12 20:32:22 CST" "2013-01-12 20:33:22 CST" [13] "2013-01-12 20:34:22 CST" "2013-01-12 20:35:22 CST" [15] "2013-01-12 20:36:22 CST" "2013-01-12 20:37:22 CST" [17] "2013-01-12 20:38:22 CST" "2013-01-12 20:39:22 CST" [19] "2013-01-12 20:40:22 CST" "2013-01-12 20:41:22 CST"
Further operations such as subsetting based on the datetime vector or adjustments to time zones are left as an exercise.
R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series,ecdf, trading) and more...

Zero Inflated Models and Generalized Linear Mixed Models with R.
Zuur, Saveliev, Ieno (2012).