R-beta: S Compatibility (again)

Thomas Lumley
Sun, 12 Apr 1998 16:59:38 -0000

On Sun, 12 Apr 1998, Bill Venables wrote:
>
> 3. Language manipulation within R seems to be impossible.  I
>    realise this may be a design limitation that nobody can do
>    anything about, but it may be worth noting.
>
>    To be more specific, the R substitute() is much more limited
>    than the S version and coercion to mode "{", "call"
or
>    "function" are unavailable, and function objects are not
>    subsetable.  as.call is useless and as.function only exists to
>    issue a rather tetchy error message.
>
>    For example, as far as I can see it is impossible to write a
>    version of the S function deriv() for R, short of getting down
>    to brass tacks and writing a new primitive into the base code,
>    but even then you can't extend it, of course.

While language manipulation is much more limited than in S, you probably
could write a version of deriv() (if it didn't already exist) since
expressions can be manipulated quite well.

eg
R> a
expression(sin(cos(x + 1)))
R> a[[1]]
sin(cos(x + 1))
R> a[[1]][[1]]
sin
R> a[[1]][[2]]
cos(x + 1)
R> a[[1]][[2]][[2]]
x + 1
R> a[[1]][[2]][[2]][[1]]
+
R> a[[1]][[2]][[2]][[2]]
x
R> a[[1]][[2]][[2]][[3]]
[1] 1
R> a[[1]][[1]]<-as.name("cos")
R> a
expression(cos(cos(x + 1)))


Thomas Lumley
------------------------
Biostatistics
Uni of Washington
Box 357232
Seattle WA 98195-7232
------------------------