On Sat, 13 Oct 2012, Logan Kelly wrote:

> I am using GRETL 1.9.9 on a Win 7 64bit machine. I found a quirk 
> that may be a bug. I found that
>
> bundle BundleOfMatrixs
> matrix BundleOfMatrixs["test"] = {}
> matrix test = {1,2,3,4}
> BundleOfMatrixs["test"] |= test
>
> yields the following error message
>
> '|=' : only defined for matrices
>
> Error executing script: halting
>> BundleOfMatrixs["test"] |= test
>
> but  that
>
> bundle BundleOfMatrixs
> matrix BundleOfMatrixs["test"] = {}
> matrix test = {1,2,3,4}
> BundleOfMatrixs["test"] = BundleOfMatrixs["test"]|test
>
> works just fine.

Hmm, not sure this is a bug. This basic idea with bundles is that if 
you want to do anything with a matrix (or any other sort of object) 
from inside the bundle you have to extract it first (which makes a 
copy of the object).

At first I was a little surprised that even your second formulation 
worked, but on reflection it's OK: on the right hand side, 
BundleOfMatrixs["test"] produces an anonymous matrix which is a copy 
of the one in the bundle, to which you concatenate another matrix; 
then the "=" operation replaces the bundle content under the key 
"test" with the new right-hand side matrix. That is, your second 
version is an acceptable variant of the canonical form

   matrix m = BundleOfMatrixs["test"] # extract
   m |= {1,2,3,4}                     # modify
   BundleOfMatrixs["test"] = m        # re-assign

I guess one could argue that your first formulation should be taken 
as shorthand for your second, but I have to say it doesn't "look 
right" to me; I would not have expected it to work -- though I admit 
I'd have had difficulty predicting the error message.

Allin Cottrell

Reply via email to