On Tue, 1 Nov 2011, artur bala wrote:

> Another point (which was my original one): the [column or row] 
> names are not saved when a matrix is returned from a function.

True. Here's a minimal case:

<hansl>
function matrix mnames (void)
   matrix m = I(3)
   colnames(m, "col1 col2 col3")
   print m
   return m
end function

matrix m = mnames()
print m
</hansl>

Initially I thought this might be a simple bug that could easily be 
fixed, but actually it turns out it's a design issue (and hence I'm 
copying gretl-devel, hoping for comments).

The point is that the gretl_matrix type knows nothing about column 
or row names. These names reside at the level of the "user_matrix" 
struct which wraps a locally named gretl_matrix for ease of use. But 
when a function returns a matrix, it returns a plain gretl_matrix: 
the names are destroyed and not returned.

The main reason that the names are attached to the "user_matrix" 
wrapper and not the gretl_matrix itself is to keep the gretl_matrix 
type lean and mean. After all, it's used internally in many contexts 
where column/row names are never wanted, and it's also offered as a 
type for matrix operations by third parties (the libgretl API) 
where, again, name-pointers are likely to be just a deadweight.

On the other hand, I can see a use-case for wanting to return a 
matrix from a user-defined function with row and/or column names 
attached. Right now, I'm not sure how to resolve this.

Allin

Reply via email to