Ooops, wrong cc.
---------- Forwarded message ----------
From: Luke Hope <rukubites(a)gmail.com>
Date: Oct 7, 2007 8:00 PM
Subject: Re: RCLG
To: "A.J. Rossini" <blindglobe(a)gmail.com>
Cc: rclg-devel(a)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(a)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