Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

From |
jpitblado@stata.com (Jeff Pitblado, StataCorp LP) |

To |
statalist@hsphsun2.harvard.edu |

Subject |
Re: st: Mata void functions and pointers |

Date |
Thu, 17 May 2012 17:41:38 -0500 |

Matthew Baker <matthew.baker@hunter.cuny.edu> is working with pointers in Mata. Originally he wrote: > I have a problem in which I am trying to populate the elements of > a pointer with the results of a function. The problem is, the function > is void and returns its results through an argument, which makes > getting results into a pointer nontransparent. As a simple example, > consider the following: > (example omitted) Brendan Halpin <brendan.halpin@ul.ie> replied with a suggestion for Matthew's specific, but it did not address Mathew's general need, so Mathew gave us more information: > I should have been more clear! I would certainly prefer to use a > vector to collect the elements, but the objects I'm collecting are of > unknown dimension which is not known in advance, so perhaps I should > have used an example like: > > /* Begin example */ > clear all > mata > void example(A,B,Ab) Ab=J(A+round(3*runiform(1,1)),B,1) > P=J(3,1,NULL) > for (i=1;i<=3;i++) { > example(i,i,Ab=.) > Ab > P[i]=&Ab > } > > /* display results */ > > for (i=1;i<=3;i++) *P[i] > end > /* end example */ > > I have thought about trying to readjust the dimensions of the vector > every time it is a little different, but this seems kind of clumsy and > I was hoping for a better alternative. Mathew can preallocate each element of the P vector with an address to it's own copy of a default Mata object, then pass that object to his 'example()' function. Here is how that would work with Mathew's example above: ***** BEGIN: clear all mata: void example(A,B,Ab) Ab=J(A+round(3*runiform(1,1)),B,1) P=J(3,1,NULL) for (i=1;i<=3;i++) { P[i] = &J(0,0,.) // PREALLOCATION example(i,i,*P[i]) *P[i] } /* display results */ for (i=1;i<=3;i++) *P[i] end ***** END: --Jeff jpitblado@stata.com * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/statalist/faq * http://www.ats.ucla.edu/stat/stata/

**Follow-Ups**:**Re: st: Mata void functions and pointers***From:*Matthew Baker <matthew.baker@hunter.cuny.edu>

- Prev by Date:
**Re: st: Mata void functions and pointers** - Next by Date:
**st: Predicted GLLAMM probs don't check out** - Previous by thread:
**Re: st: Mata void functions and pointers** - Next by thread:
**Re: st: Mata void functions and pointers** - Index(es):