[R] Perl vs. R
John Day
jday at csihq.com
Wed Jun 12 13:23:02 CEST 2002
Prof. Bates,
Thanks for the pointers. I ran your two-liner (the args to write.table()
needed to be swapped) and noted the runtime to be about 0.9 secs in CMD
BATCH mode, several times slower than the Perl. You were right.
Actually, the code is not correct. The specification required the
benchmark code to collect the fields in A and use the 1301 unique codes in
B as a key to retrieve the A's appended and sorted in a list. That might
require an explicit loop, which will slow it down even more.
But even then, for research and learning purposes, I think I could live
with this sluggish performance most of the time, just to avoid having to
interface with Perl. It's very convenient to do everything in R. Maybe
occasionally use Perl where performance demands it etc.
I have the new John Fox book on order. But will try to find a copy of
Venables-Ripley too. I don't have S-Plus, I thought the Fox book might be
better for R-only users.
I also want to study Pinheiro-Bates, but must wait until I have grasped the
basics.
Thanks,
John Day
At 11:14 AM 6/11/02 -0500, you wrote:
>John Day <jday at csihq.com> writes:
>
> > I am being told that R can process text files and strings as well as
> > Perl (and is certainly more elegant).
>
>"as well as" is in the eye of the beholder. Perl is very highly tuned
>to manipulating text files. One story of how the name perl came about
>is as an acronym for "Practical Extraction and Report Language".
>
>R is an environment for statistical computing and graphics. Although
>there are pattern matching and text substitution functions in R, it is
>not well suited to writing "one-off" text transformation programs.
>You will find that starting R probably takes longer than the execution
>of the perl program.
>
>Rather than trying to take a simple benchmark and see how R performs
>on it, it would be better to learn about the language and see if it
>fulfills a real need for you. I would suggest starting with Venables
>and Ripley's "Modern Applied Statistics with S-PLUS (3rd ed)" or the
>eagerly-awaited fourth edition of that book slated for publication
>this summer.
>
>Having said all this, I believe your perl program can be coded in R as
>something like
>
> df <- read.table('infile', header = FALSE, sep = '\t', col = c('a', 'b'))
> write.table('outfile', df[order(df$b), c('b', 'a')])
>
>although I think it would be better for you to describe what the task
>is rather than providing perl code to accomplish the task. I long ago
>gave up reading other people's perl code and trying to make sense of
>it. (In the Python community there is a saying that "Hell is reading
>other people's Perl code".)
>
> > Being an R neophyte I need a little boost to get started. I have a
> > little benchmark program in Perl that reads a delimited file, creates
> > an inverted table and spits the file out again in key sorted order.
> >
> >
> > It's just a few lines of Perl (see below). Can someone write the
> > equivalent in R? The benchmark and associated files are available
> > from: http://www.lib.uchicago.edu/keith/crisis/benchmarks/invert/
> >
> >
> > You'll note on this page that Perl runs the benchmark in 3.5
> > secs. That was in 1997. My 5.6.1 version of Perl runs it in 0.18 secs
> > now, on my 600Mhz Linux platform. Wondering how fast R will be in
> > comparison.
> >
> >
> > Thanks,
> > John Day
> >
> > FYI, here's the Perl source:
> >
> > #!/local/bin/perl
> > # invert benchmark in Perl
> > # see <url:http://www.lib.uchicago.edu/keith/crisis/benchmarks/invert/
> > # Keith Waclena <k-waclena at uchicago.edu>
> >
> > while (<STDIN>) {
> > chop;
> > ($a, $b) = split(/\t/);
> > $B{$b} .= "\t$a"; # gotta lose leading tab later...
> > }
> >
> > foreach $b (sort keys %B) {
> > # lose the leading tab with substr...
> > print "$b\t" . join("\t", sort(split(/\t/, substr($B{$b}, 1)))) .
> "\n";
> > }
> >
> >
> -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
> > r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
> > Send "info", "help", or "[un]subscribe"
> > (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch
> >
> _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
>
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
More information about the R-help
mailing list