|  | 
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]
Re: st: R and Stata efficiency
On Jul 10, 2007, at 9:42 AM, David Airey wrote:
One other comments from the R user regarding efficiency was about  
nesting functions:
One other issue is that the result of a command (sic in Stata)  
cannot be used directly as the argument of another commmand.  In  
R, I can do something like
dhdbeta = A %*% diag(exp(aacoef))
in which, exp() gives the exponential values of the elements in  
aacoef, then diag() makes a matrix with the diagonal being those  
exponential values, then the matrix is multiplied on the left by  
another matrix A. The exp() and diag() are calculated on the fly  
and discarded afterwards. Their values are not used elsewhere and  
thus there is no need to save them explicitly just for the next  
step.  While in Stata, I have save them.
That's true, and it's because in Stata, we do most things with  
commands rather than function calls; e.g., the difference between
est replay results
and
summary(results)
You can use the constructions `= ' and `: ' to get inline access to  
Stata's expression evaluator and extended macro functions,  
respectively (see [P] macro), but those are only a small part of what  
one does at the command line.
Perhaps this issue surfaces most frequently when users complain that  
they can't type
reg log(y) x
I have no idea whether StataCorp has considered making this possible,  
however, even if it did, it would not remove the fundamental  
distinction between a Stata command and a function call.
Note that there are good arguments for the way Stata works.  One  
important one is ease of use; all Stata commands (if they're written  
according to StataCorp's specs) follow a common, simple syntax, which  
makes them very easy to use interactively.  When using R  
interactively I am constantly having to consult the man pages to  
remind myself of the signatures for various functions (though, in  
fairness, if I used it more frequently I'd remember more).
Finally, if you start using Mata, you'll see that it's a lot more  
like R in this respect (i.e., most statements are either assignment  
and/or function calls, and you can nest function calls arbitrarily).   
I do most of my statistical programming in Mata these days (except  
for rather thin wrappers in Stata to implement the UI), and recently  
have done a bit of working porting an existing R package into Stata.   
In that context, I find that I am able to write just as "efficient"  
code (in the sense of fewer lines) in Mata (or even more so) than the  
original in R.
-- Phil
*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/