[rclg-devel] FWD: RCLG

Luke Hope rukubites at gmail.com
Sun Oct 7 10:02:27 UTC 2007


Ooops, wrong cc.

---------- Forwarded message ----------
From: Luke Hope <rukubites at gmail.com>
Date: Oct 7, 2007 8:00 PM
Subject: Re: RCLG
To: "A.J. Rossini" <blindglobe at gmail.com>
Cc: rclg-devel at commonlisp.net


Hi again,

I spent the afternoon going through a basic R/stats tutorial.  I'm not
experienced with R, my background is machine learning and I want to
get familiar with a real statistical language.  For various reasons, I
want to do it in lisp also, so here I am.

Anyway, I have a request for help, a bugfix, a bug report, and a small
enhancement.  This might wake up the list. :)

The request for help is: how do I express something like
pairs ( iris[,1:4]) in rclg?  It's not the 1:4 -> (r seq 1 4) that
confuses me, it's the [,x] bit that has me lost.

The bugfix is to support ratios (e.g. 2/9) input to R.  The diff is at
the bottom of the page.

The bug:
- Not specifying xlab causes the value of x to be displayed in
plot/matplot instead of the default xlab "x" which occurs in R proper.
E.G.
(defparameter x (r seq 0 30))
(r plot x (rnbi dbinom x 30 .5)  :ylab "p(x)")

The enhancement makes e.g. [rfunc args] expand to (r rfunc args),
unless you're already in an r block, which then expands to (rnbi rfun
args).  This REALLY improves readability, and makes something like:
(setf x [rbinom 5000 100 .5])
(setf m [mean x])
(setf m1 [mean [^ [- x m] 3]])
A LOT less ugly (the third line in particular).

(defparameter *in-r-block* nil)
(defun enable-r-brackets (left right)
  (set-macro-character right (get-macro-character #\)))
  (set-macro-character left
     #'(lambda (stream char)
         (declare (ignore char))
         `(,(if *in-r-block* 'rclg:rnbi 'rclg:r)
            ,@(let ((*in-r-block* t))
                   (read-delimited-list right stream t))))))

Cheers,

-Luke

Signed-off-by: Luke Hope <rukubites at gmail.com>
---
 src/rclg-convert.lisp |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/src/rclg-convert.lisp b/src/rclg-convert.lisp
index 52daea2..808ff83 100644
--- a/src/rclg-convert.lisp
+++ b/src/rclg-convert.lisp
@@ -94,6 +94,7 @@ Assumes it's a string robj."
   (:method ((n null)) *r-nil-value*)
   (:method ((i integer)) (int-to-robj i))
   (:method ((f float)) (float-to-robj f))
+  (:method ((r ratio)) (ratio-to-robj r))
   (:method ((d double-float)) (double-float-to-robj d))
   (:method ((c complex)) (complex-to-robj c))
   (:method ((s string)) (string-to-robj s))
@@ -124,6 +125,10 @@ Coerces the number to double-float since R has no
sense of lower
 precision."
   (double-float-to-robj (coerce f 'double-float)))

+(defun ratio-to-robj (r)
+  "Returns an R object corresponding to a CL ratio.
+Coerces the number to double-float as a hack."
+  (double-float-to-robj (coerce r 'double-float)))

 (defun double-float-to-robj (d)
   "Returns an R object corresponding to a double floating point number."
--
1.5.3.2



More information about the Rclg-devel mailing list