r: a nearly-lisp - zslug.files.wordpress.com · lisp-like features in r macros: i substitute:...

52
R: a nearly-Lisp Christophe Rhodes Teclo Networks AG April 6, 2011 1 / 29

Upload: vukhanh

Post on 07-Jul-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

R: a nearly-Lisp

Christophe Rhodes

Teclo Networks AG

April 6, 2011

1 / 29

Page 2: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

Outline

Introduction

ExamplesRepeated MeasurementTrellis Graphics

R and Lisp

2 / 29

Page 3: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

Outline

Introduction

ExamplesRepeated MeasurementTrellis Graphics

R and Lisp

3 / 29

Page 4: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

IntroductionHistory and Background: R

“a free software environment for statistical computing andgraphics”

I “free”:1. you don’t have to pay for it;2. you are (broadly) free to modify it for your own purposes;3. you don’t get to whine at the R developers if it doesn’t work

for you (unless you pay for support).I “statistical computing”

1. modelling, tests, time-series analysis, classification, clustering,and so on

2. typical strength: vector computations on large datasets,provided with BLAS and LAPACK

I “graphics”1. many predefined graphical facilities;2. publication-quality output.

4 / 29

Page 5: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

IntroductionHistory and Background: R

“a free software environment for statistical computing andgraphics”

I “free”:1. you don’t have to pay for it;2. you are (broadly) free to modify it for your own purposes;3. you don’t get to whine at the R developers if it doesn’t work

for you (unless you pay for support).

I “statistical computing”1. modelling, tests, time-series analysis, classification, clustering,

and so on2. typical strength: vector computations on large datasets,

provided with BLAS and LAPACKI “graphics”

1. many predefined graphical facilities;2. publication-quality output.

4 / 29

Page 6: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

IntroductionHistory and Background: R

“a free software environment for statistical computing andgraphics”

I “free”:1. you don’t have to pay for it;2. you are (broadly) free to modify it for your own purposes;3. you don’t get to whine at the R developers if it doesn’t work

for you (unless you pay for support).I “statistical computing”

1. modelling, tests, time-series analysis, classification, clustering,and so on

2. typical strength: vector computations on large datasets,provided with BLAS and LAPACK

I “graphics”1. many predefined graphical facilities;2. publication-quality output.

4 / 29

Page 7: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

IntroductionHistory and Background: R

“a free software environment for statistical computing andgraphics”

I “free”:1. you don’t have to pay for it;2. you are (broadly) free to modify it for your own purposes;3. you don’t get to whine at the R developers if it doesn’t work

for you (unless you pay for support).I “statistical computing”

1. modelling, tests, time-series analysis, classification, clustering,and so on

2. typical strength: vector computations on large datasets,provided with BLAS and LAPACK

I “graphics”1. many predefined graphical facilities;2. publication-quality output.

4 / 29

Page 8: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

IntroductionHistory and Background: R

Abbreviated timeline:I S (John Chambers): similar to but not exactly like SchemeI Public R release in 1993; Free Software in 1995I Core group formed in 1997I R version 1.0.0 released in 2000I biannual releases continue

Compare with:I S-PLUS (commercial release of S)I SAS, Stata, JAGSI Scilab, Octave, MatlabI Gnuplot, Spreadsheets

5 / 29

Page 9: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

IntroductionHistory and Background: R

Abbreviated timeline:I S (John Chambers): similar to but not exactly like SchemeI Public R release in 1993; Free Software in 1995I Core group formed in 1997I R version 1.0.0 released in 2000I biannual releases continue

Compare with:I S-PLUS (commercial release of S)I SAS, Stata, JAGSI Scilab, Octave, MatlabI Gnuplot, Spreadsheets

5 / 29

Page 10: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

IntroductionHistory and Background: R

Web:I R home page: http://www.r-project.org/I Emacs Speaks Statistics: http://ess.r-project.org/I Comprehensive R Archive Network:

http://cran.r-project.org/I R Journal: http://journal.r-project.org/I StackOverflow:

http://stackoverflow.com/questions/tagged/rI RSeek: http://www.rseek.org/

Mail / News:I R help: [email protected] /

gmane.comp.lang.r.generalI ESS help: [email protected] /

gmane.emacs.ess.general6 / 29

Page 11: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

IntroductionHistory and Background: Me

Mathematics

Physics

7 / 29

Page 12: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

IntroductionHistory and Background: Me

Mathematics

Physics

(Lisp) Hacking

7 / 29

Page 13: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

IntroductionHistory and Background: Me

Mathematics

Physics

(Lisp) Hacking

Music

Information Retrieval

7 / 29

Page 14: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

IntroductionHistory and Background: Me

Mathematics

Physics

(Lisp) Hacking

Music

Information Retrieval

today

7 / 29

Page 15: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

IntroductionR syntax

Very close to the original S:I constants: numeric (1, 3:5, 4.2) and text ("foo")I operators: arithmetic (+, *, %*%) and logical (<, &, %in%)I function calls:

I seq(1,10)I seq(from=1, 10)I seq(to=10, from=1)I seq(1, 10, by=1)

I assignment: <- (also =)I loop constructs: while, forI conditional expressions: if (but see also ifelse)

8 / 29

Page 16: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

R data types

I vectorsI characterI numeric

I doubleI integerI complex

I logical

I list (generic vectors, dotted pairs)I data framesI attributes

9 / 29

Page 17: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

IntroductionR semantics

Function calls and scope:I lexical bindingI (abbreviatable) keyword argumentsI lazy argument evaluationI split-horizon scopingI copy-on-write modification

I <<- to override

I first-class environments, argument to eval

10 / 29

Page 18: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

Outline

Introduction

ExamplesRepeated MeasurementTrellis Graphics

R and Lisp

11 / 29

Page 19: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

Outline

Introduction

ExamplesRepeated MeasurementTrellis Graphics

R and Lisp

12 / 29

Page 20: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesRepeated Measurement

Motivation:I Simple exampleI Introduction to functionality

I Single most useful thing to know about measurement

13 / 29

Page 21: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesRepeated Measurement

Motivation:I Simple exampleI Introduction to functionalityI Single most useful thing to know about measurement

13 / 29

Page 22: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesRepeated Measurement

Setup:I Some quantity that we want to measure;I Measurement is noisy.

I could be ‘random noise’ in our equipment;I could be other systematic effects;

More specifically:I measure: {} → µ+ ε

I ε ∼ D(0, σ2)

I Cov(εi , εj) = 0

14 / 29

Page 23: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesRepeated Measurement

What do we expect when we take a measurement?I a value somewhere near the ‘true’ value;I but could be a long way away;I in general, don’t even know how much noise there is.

Everyone knows what to do: take more measurements andaverage...

I ...but why?

15 / 29

Page 24: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesRepeated Measurement

What do we expect when we take a measurement?I a value somewhere near the ‘true’ value;I but could be a long way away;I in general, don’t even know how much noise there is.

Everyone knows what to do: take more measurements andaverage...

I ...but why?

15 / 29

Page 25: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesRepeated Measurement

We expect that the average we compute is, on average, the truevalue:

E

(1N

N∑i

xi

)=

1N

N∑i

E (xi ) = µ

What is the variance about this true value?

Var

(1N

N∑i

xi

)=

1N2 Var

(N∑i

xi

)=

1N2 × Nσ2 =

σ2

N

Standard deviation of the average scales as 1√N

[wait a minute, this was meant to be a talk about R]

16 / 29

Page 26: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesRepeated Measurement

We expect that the average we compute is, on average, the truevalue:

E

(1N

N∑i

xi

)=

1N

N∑i

E (xi ) = µ

What is the variance about this true value?

Var

(1N

N∑i

xi

)=

1N2 Var

(N∑i

xi

)=

1N2 × Nσ2 =

σ2

N

Standard deviation of the average scales as 1√N

[wait a minute, this was meant to be a talk about R]

16 / 29

Page 27: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesRepeated Measurement

We expect that the average we compute is, on average, the truevalue:

E

(1N

N∑i

xi

)=

1N

N∑i

E (xi ) = µ

What is the variance about this true value?

Var

(1N

N∑i

xi

)=

1N2 Var

(N∑i

xi

)=

1N2 × Nσ2 =

σ2

N

Standard deviation of the average scales as 1√N

[wait a minute, this was meant to be a talk about R]

16 / 29

Page 28: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesRepeated Measurement

We expect that the average we compute is, on average, the truevalue:

E

(1N

N∑i

xi

)=

1N

N∑i

E (xi ) = µ

What is the variance about this true value?

Var

(1N

N∑i

xi

)=

1N2 Var

(N∑i

xi

)=

1N2 × Nσ2 =

σ2

N

Standard deviation of the average scales as 1√N

[wait a minute, this was meant to be a talk about R]

16 / 29

Page 29: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

Outline

Introduction

ExamplesRepeated MeasurementTrellis Graphics

R and Lisp

17 / 29

Page 30: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesTrellis Graphics

Motivation:I Clear display of complex, multivariate informationI Rapid experimentationI Adequate defaults, hooks everywhere

I Teach how not to lie with statisticsI Defeat ‘bad graph of the week’ syndrome

18 / 29

Page 31: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesTrellis Graphics

Motivation:I Clear display of complex, multivariate informationI Rapid experimentationI Adequate defaults, hooks everywhereI Teach how not to lie with statisticsI Defeat ‘bad graph of the week’ syndrome

18 / 29

Page 32: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesTrellis Graphics

Distinct graphical and graphing system, originally for S+:I Multipanel ConditioningI Banking to 45°I AutomationI Customization

Becker, R. A. and Cleveland, W. S., S-PLUS Trellis Graphics User’sManual, Seattle: MathSoft, Inc., Murray Hill: Bell Labs, 1996.

19 / 29

Page 33: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesTrellis Graphics: Multipanel Conditioning

dotplot(variety~yield|site, data = barley, groups = year,key = simpleKey(levels(barley$year), space = "right"),xlab = "yield")

yield

Svansota

No. 462

Manchuria

No. 475

Velvet

Peatland

Glabron

No. 457

Wisconsin No. 38

Trebi

20 30 40 50 60

Grand Rapids

Duluth

20 30 40 50 60

University FarmSvansota

No. 462

Manchuria

No. 475

Velvet

Peatland

Glabron

No. 457

Wisconsin No. 38

Trebi

Morris

20 30 40 50 60

Crookston

Waseca

19321931

20 / 29

Page 34: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesTrellis Graphics: Multipanel Conditioning

dotplot(variety~yield|site, data = barley, groups = year,key = simpleKey(levels(barley$year), space = "right"),xlab = "yield")

yield

Svansota

No. 462

Manchuria

No. 475

Velvet

Peatland

Glabron

No. 457

Wisconsin No. 38

Trebi

20 30 40 50 60

Grand Rapids

Duluth

20 30 40 50 60

University FarmSvansota

No. 462

Manchuria

No. 475

Velvet

Peatland

Glabron

No. 457

Wisconsin No. 38

Trebi

Morris

20 30 40 50 60

Crookston

Waseca

19321931

20 / 29

Page 35: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesTrellis Graphics: Banking to 45°

xyplot(sunspot.year)xyplot(sunspot.year, aspect="xy")

Yearly Sunspots

suns

pot.y

ear

1700 1750 1800 1850 1900 1950 2000

0

50

100

150

Year

suns

pot.y

ear

1700 1750 1800 1850 1900 1950 2000

0100

21 / 29

Page 36: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesTrellis Graphics: Banking to 45°

xyplot(sunspot.year)xyplot(sunspot.year, aspect="xy")

Yearly Sunspots

suns

pot.y

ear

1700 1750 1800 1850 1900 1950 2000

0

50

100

150

Year

suns

pot.y

ear

1700 1750 1800 1850 1900 1950 2000

0100

21 / 29

Page 37: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesTrellis Graphics: Automation

useOuterStrips(xyplot(log10(counts)~hour|weekday+month, data=biocAccess,

type=c("p", "a"), as.table=TRUE, pch=".", cex=2))

hour

log1

0(co

unts

)

2.5

3.0

3.5

4.0

Monday

Jan

0 5 10 15 20

Tuesday

Jan

Wednesday

Jan

0 5 10 15 20

Thursday

Jan

Friday

Jan

0 5 10 15 20

Saturday

Jan

Sunday

Jan

Monday

Feb

Tuesday

Feb

Wednesday

Feb

Thursday

Feb

Friday

Feb

Saturday

Feb

2.5

3.0

3.5

4.0Sunday

Feb

2.5

3.0

3.5

4.0Monday

Mar

Tuesday

Mar

Wednesday

Mar

Thursday

Mar

Friday

Mar

Saturday

Mar

Sunday

Mar

Monday

Apr

Tuesday

Apr

Wednesday

Apr

Thursday

Apr

Friday

Apr

Saturday

Apr

2.5

3.0

3.5

4.0Sunday

Apr

2.5

3.0

3.5

4.0

0 5 10 15 20

Monday

May

Tuesday

May

0 5 10 15 20

Wednesday

May

Thursday

May

0 5 10 15 20

Friday

May

Saturday

May

0 5 10 15 20

Sunday

May

22 / 29

Page 38: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesTrellis Graphics: Automation

useOuterStrips(xyplot(log10(counts)~hour|weekday+month, data=biocAccess,

type=c("p", "a"), as.table=TRUE, pch=".", cex=2))

hour

log1

0(co

unts

)

2.5

3.0

3.5

4.0

Monday

Jan

0 5 10 15 20

Tuesday

Jan

Wednesday

Jan

0 5 10 15 20

Thursday

Jan

Friday

Jan

0 5 10 15 20

Saturday

Jan

Sunday

Jan

Monday

Feb

Tuesday

Feb

WednesdayF

ebThursday

Feb

Friday

Feb

Saturday

Feb

2.5

3.0

3.5

4.0Sunday

Feb

2.5

3.0

3.5

4.0Monday

Mar

Tuesday

Mar

Wednesday

Mar

ThursdayM

arFriday

Mar

Saturday

Mar

Sunday

Mar

Monday

Apr

Tuesday

Apr

Wednesday

Apr

Thursday

Apr

FridayA

prSaturday

Apr

2.5

3.0

3.5

4.0Sunday

Apr

2.5

3.0

3.5

4.0

0 5 10 15 20

Monday

May

Tuesday

May

0 5 10 15 20

Wednesday

May

Thursday

May

0 5 10 15 20

Friday

May

Saturday

May

0 5 10 15 20

Sunday

May

22 / 29

Page 39: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

ExamplesTrellis Graphics: Customization

�������� ���� ��� ��������

�� ���� �� ���

�������� ���� � �����

�������

��

��

��

�� �� ��

����������� �����������

�� �� ��

����������� �����������

�� �� ��

����������� �����������

����������� ����������� ����������� ����������� �����������

��

��

��

�������������

��

��

����������� ����������� ����������� ����������� ����������� �����������

�����������

�� �� ��

����������� �����������

�� �� ��

����������� �����������

�� �� ��

��

��

��

����������� ������

������������������������������������������������

23 / 29

Page 40: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

Trellis GraphicsLattice

Implementation of Trellis concepts in R:I ‘high-level’ functions: xyplot, bwplot, densityplotI panel functions: panel.xyplot, panel.bwplot,

panel.densityplotI utility functions: useOuterStrips, resizePanels

Sarkar, D., Lattice: Multivariate Data Visualization with R, New York:Springer Science+Business Media, 2008.

24 / 29

Page 41: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

Outline

Introduction

ExamplesRepeated MeasurementTrellis Graphics

R and Lisp

25 / 29

Page 42: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

R and LispLisp-like features in R

analogues to read, eval, printI parse:

I apply to character vector or file;I returns a list of expressions, optionally decorated with source

location information;I eval

I takes (list of) expressions as argument;I returns value of last expression;I optional (lexical) environment argument, defaults to local

I deparseI string representation of objectI approximately inverse of parse

26 / 29

Page 43: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

R and LispLisp-like features in R

with-output-to-string:I capture.outputI also similar stream concept to/from a variety of sources

setf:I x <- 3I foo(x) <- 3

I ‘foo<-‘(x, value=3)

conditions, handlers and restarts:I tryI tryCatchI withCallingHandlers

I signalConditionI simpleError, simpleWarning, simpleMessageI withRestarts, findRestart, invokeRestart

27 / 29

Page 44: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

R and LispLisp-like features in R

with-output-to-string:I capture.outputI also similar stream concept to/from a variety of sources

setf:I x <- 3I foo(x) <- 3

I ‘foo<-‘(x, value=3)

conditions, handlers and restarts:I tryI tryCatchI withCallingHandlers

I signalConditionI simpleError, simpleWarning, simpleMessageI withRestarts, findRestart, invokeRestart

27 / 29

Page 45: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

R and LispLisp-like features in R

with-output-to-string:I capture.outputI also similar stream concept to/from a variety of sources

setf:I x <- 3I foo(x) <- 3

I ‘foo<-‘(x, value=3)

conditions, handlers and restarts:I tryI tryCatchI withCallingHandlers

I signalConditionI simpleError, simpleWarning, simpleMessageI withRestarts, findRestart, invokeRestart

27 / 29

Page 46: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

R and LispLisp-like features in R

Macros:I substitute: approximately like once-onlyI eval.parent: approximately like , or ,@

withRetryRestart <- function(description, expr) {call <- substitute(expr)retry <- TRUEwhile(retry) {

retry <- FALSEwithRestarts(eval.parent(call),

retry=list(description=description,handler=function() retry <<- TRUE))

}}

withRetryRestart("retry SLIME interactive evaluation request",value <- eval(parse(text=string), envir=globalenv()))

28 / 29

Page 47: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

R and LispLisp-like features in R

Macros:I substitute: approximately like once-onlyI eval.parent: approximately like , or ,@

withRetryRestart <- function(description, expr) {call <- substitute(expr)retry <- TRUEwhile(retry) {

retry <- FALSEwithRestarts(eval.parent(call),

retry=list(description=description,handler=function() retry <<- TRUE))

}}

withRetryRestart("retry SLIME interactive evaluation request",value <- eval(parse(text=string), envir=globalenv()))

28 / 29

Page 48: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

R and LispLisp-like features in R

Macros:I substitute: approximately like once-onlyI eval.parent: approximately like , or ,@

withRetryRestart <- function(description, expr) {call <- substitute(expr)retry <- TRUEwhile(retry) {

retry <- FALSEwithRestarts(eval.parent(call),

retry=list(description=description,handler=function() retry <<- TRUE))

}}

withRetryRestart("retry SLIME interactive evaluation request",value <- eval(parse(text=string), envir=globalenv()))

28 / 29

Page 49: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

R and LispLisp-like features in R: SLIME

SLIME: Superior Lisp Interaction Mode for Emacs.I started in 2003 for CMUCL only;I it was too easy to port to other Common Lisps

Vague server (swank) backends for:I Ikarus, Kawa, Larceny, MIT Scheme, R6RSI GooI JoltI Ruby

(other client implementations: Climacs, Vim, MCLIDE)

swankr: http://common-lisp.net/~crhodes/swankr/I Lots doesn’t work. Please help!

Any questions?

29 / 29

Page 50: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

R and LispLisp-like features in R: SLIME

SLIME: Superior Lisp Interaction Mode for Emacs.I started in 2003 for CMUCL only;I it was too easy to port to other Common Lisps

Vague server (swank) backends for:I Ikarus, Kawa, Larceny, MIT Scheme, R6RSI GooI JoltI Ruby

(other client implementations: Climacs, Vim, MCLIDE)

swankr: http://common-lisp.net/~crhodes/swankr/I Lots doesn’t work. Please help!

Any questions?

29 / 29

Page 51: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

R and LispLisp-like features in R: SLIME

SLIME: Superior Lisp Interaction Mode for Emacs.I started in 2003 for CMUCL only;I it was too easy to port to other Common Lisps

Vague server (swank) backends for:I Ikarus, Kawa, Larceny, MIT Scheme, R6RSI GooI JoltI Ruby

(other client implementations: Climacs, Vim, MCLIDE)

swankr: http://common-lisp.net/~crhodes/swankr/I Lots doesn’t work. Please help!

Any questions?

29 / 29

Page 52: R: a nearly-Lisp - zslug.files.wordpress.com · Lisp-like features in R Macros: I substitute: approximatelylikeonce-only I eval.parent: approximatelylike, or,@ withRetryRestart

R and LispLisp-like features in R: SLIME

SLIME: Superior Lisp Interaction Mode for Emacs.I started in 2003 for CMUCL only;I it was too easy to port to other Common Lisps

Vague server (swank) backends for:I Ikarus, Kawa, Larceny, MIT Scheme, R6RSI GooI JoltI Ruby

(other client implementations: Climacs, Vim, MCLIDE)

swankr: http://common-lisp.net/~crhodes/swankr/I Lots doesn’t work. Please help!

Any questions?

29 / 29