Re: [Gsll-devel] Introducing "Grid Structured Data"
![](https://secure.gravatar.com/avatar/f3826f09cda5af90d95b7df1268825b1.jpg?s=120&d=mm&r=g)
On Sat, 16 Jan 2010, Mirko Vukovic wrote:
How would one handle this:
Suppose I have an vector V of containers C (in this particular case, these are objects of same type that hold data in matrix form) v=#(c0 c1 c2 c3 c4)
I extract a matrix from a C like (m c1), and I want the (aref (m C) 0 5).
Can xarray let me do (magic-command v 2 0 5) to extract the 0 5 element from the matrix in (aref v 2) (in this case, c2)?
I know I can write a function to do that. But does xarray provide a built-in unified mechanism to allow rows and columns of the stored matrix? Maybe that is part of your response above?
xref is a generic function, dispatching on its first argument. So if you have a vector, that is a subtype of array, so xref will call the method for arrays, which will just signal an error for the extra subscripts. You can deal with this by wrapping your vector in a class, and then dispatching on that, defining a method for xref that will use the extra subscripts to look up elements in the container. Of course, one could change the semantics and deal with extra subscripts by looking stuff up recursively. At first glance, that looks like a "clever trick", ie something appealing in a particular situation, with the possibility of leading to subtle bugs in general. R is full of these. Generally, I am very hostile to "clever" semantics: I always prefer to see an error, instead of the interface guessing that I meant something else. If you still want magic-command, it can be done like this (untested): (defun xref* (object &rest subscripts) (let ((rank (xrank object))) (if (< rank (length subscripts)) (apply #'xref* (apply #'xref object (subseq subscripts 0 rank)) (nthcdr rank subscripts)) (xref object subscripts)))) Tamas
participants (1)
-
Tamas Papp