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]
Re: st: MATA function modifies global variables
From
George Vega Yon <[email protected]>
To
[email protected]
Subject
Re: st: MATA function modifies global variables
Date
Thu, 6 Jun 2013 16:23:28 -0400
Sorry, I forgot to change that, blop_vec() is "myfun" and neig is "X".
I'll just rewrite the code with the corrections. Thank you!
__________________________
mata:
/* Function definition */
real colvector myfun(real colvector y, real matrix x) {
real matrix z
y = y'
x = x'
... some code lines (no poiter to Y or X)...
return(z)
}
X = (
0,0 \
1,0 \
1,1 \
0,1 \
1/2,1/2\
.9,1/2 \
.2,.5 \
.8,.3
)
Y = runiform(rows(X),1)
/* Testing */
timer_clear()
for(i=1;i<=100;i++) {
timer_on(1)
YC = myfun(Y,X)
timer_off(1)
}
timer()
end
__________________________
George Vega Yon
7 647 2552
http://cl.linkedin.com/in/georgevegayon
2013/6/6 Sergiy Radyakin <[email protected]>:
> Can you tell us what neig is? what blop_vec is?
>
> On Thu, Jun 6, 2013 at 4:10 PM, George Vega Yon <[email protected]> wrote:
>> Dear Statalisters,
>>
>> I'm having a weird problem on variables' scope. I have a function that
>> takes two objects (a real colvector and a matrix) wich, once inside
>> the function, are transposed. This function returns a matrix (builded
>> inside of the function of course). The problem is that the function
>> seems to actually transpose the global objects (not only the copies
>> within the function), thing that, as far as I know, should not be
>> happening as I'm not using pointers to the global objects.
>>
>> My code looks something like this
>> __________________________
>> mata:
>> /* Function definition */
>> real colvector myfun(real colvector y, real matrix x) {
>>
>> real matrix z
>>
>> y = y'
>> x = x'
>>
>> ... some code lines (no poiter to Y or X)...
>>
>> return(z)
>> }
>>
>> Y = runiform(rows(neig),1)
>> X = (
>> 0,0 \
>> 1,0 \
>> 1,1 \
>> 0,1 \
>> 1/2,1/2\
>> .9,1/2 \
>> .2,.5 \
>> .8,.3
>> )
>>
>>
>> /* Testing */
>> timer_clear()
>> for(i=1;i<=100;i++) {
>> timer_on(1)
>> YC = blop_vec(Y,X)
>> timer_off(1)
>> }
>> timer()
>>
>> end
>> __________________________
>>
>>
>> I get the error
>>
>> __________________________
>> myfun: 3203 Y[1,8] found where colvector required
>> <istmt>: - function returned error
>> __________________________
>>
>> Thanks in advanced,
>>
>> George Vega Yon
>> 7 647 2552
>> http://cl.linkedin.com/in/georgevegayon
>> *
>> * For searches and help try:
>> * http://www.stata.com/help.cgi?search
>> * http://www.stata.com/support/faqs/resources/statalist-faq/
>> * http://www.ats.ucla.edu/stat/stata/
> *
> * For searches and help try:
> * http://www.stata.com/help.cgi?search
> * http://www.stata.com/support/faqs/resources/statalist-faq/
> * http://www.ats.ucla.edu/stat/stata/
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/faqs/resources/statalist-faq/
* http://www.ats.ucla.edu/stat/stata/