[Rcpp-devel] Accessing matrix elements
Michael Braun
braunm at MIT.EDU
Sun May 15 00:00:04 CEST 2011
Hi, Rcpp-friends:
File this post under "rookie mistake, "educational illustration," or "feature request," but I noticed something in accessing elements from Rcpp matrices that I found somewhat curious. Consider the following code, for which the objective is just to print elements of a matrix.
library(inline)
body <- '
using namespace std;
using namespace Rcpp;
NumericMatrix x(x_);
int i, j;
int m = x.nrow();
int n = x.ncol();
for (i=0; i<m; i++) {
for (j=0; j<n; j++) {
cout << x[i,j] << " "; // Accessing element using square brackets
}
cout << endl;
}
cout << endl << endl;
for (i=0; i<m; i++) {
for (j=0; j<n; j++) {
cout << x(i,j) << " "; // Accessing element using parentheses
}
cout << endl;
}
return (wrap(0));
'
func <- cxxfunction(signature(x_="numeric"),
body,
plugin="Rcpp"
)
x <- matrix(as.numeric(c(1,2,3,4)), nrow=2, ncol=2)
print(x) // Displaying the matrix, as intended
func(x)
In R, I would access the matrix elements using the x[i,j] syntax, but clearly that does not work in Rcpp. The x(i,j) syntax is correct, and I suppose that this is what is documented. But when using the square brackets, there is no error either at compile-time or run-time. And since the behavior seems "undefined" (at least to me), it is very easy to make the mistake of using R-style square brackets instead of Rcpp-style parentheses. Now, I am not claiming that this is a bug. But I wonder how hard it might be to overload the square brackets so they behave the same way an R user might expect. And if there is a good reason why Rcpp behaves this way, I'm interested in learning what it is, for future reference.
Thanks,
Michael
-------------------------------------------
Michael Braun
Associate Professor of Management Science (Marketing Group)
MIT Sloan School of Management
100 Main St.., E62-535
Cambridge, MA 02139
braunm at mit.edu
617-253-3436
More information about the Rcpp-devel
mailing list