Kleine Einführung IBM-APL2 und S-Plus oder R

Technische Hinweise unter XWindow

IBM-APL2
S-Plus oder R
Solaris Betriebssystem
Starten: apl2
Beenden im Menue mit
)CONTINUE oder )OFF
Tastatur
Hilfe: rechts im Fenster oder mit
IDIOMS (Ctrl F2) und Eingabe von Suchbegriff, dann Taste F5 (Suchen) oder
Taste F6 (Themenauflistung)
Taste F1 )vars (Variablen)
Taste F2 )fns (Funktionen)
Solaris Betriebssystem
Starten: Splus
Beenden q()
Hilfe: help.start()
Graphikfensters: motif() options(gui="openlook") oder
options(gui="motif")
Dateneditor: data.ed(mydata)

Vektoren

Vektor 1 bis 10
VEK 10
VEK
1 2 3 4 5 6 7 8 9 10
>vek <- 1:10
>vek

[1] 1 2 3 4 5 6 7 8 9 10
Abmessung von Vektoren
VEK
10
>length(vek)

[1] 10
Vektor 4 bis 10
KURZ 3 10
KURZ
4 5 6 7 8 9 10
>kurz <- 4:10
>kurz

[1] 4 5 6 7 8 9 10
Negative Zahlen. Verbinden der Vektoren durch Komma
Im APL steht das Vorzeichenminus oben
das mittlere Minus ist eine eine Funktion
NEGA KURZ,-KURZ
NEGA
4 5 6 7 8 9 10 4 5 6 7 8 9 10
Im S-Plus oder R es gibt nur ein mittleres Minus
c(): die Funktion combine
>nega <- c(kurz,-kurz)
>nega

[1] 4 5 6 7 8 9 10 -4 -5 -6 -7 -8 -9 -10
Addieren
PLUS KURZ+KURZ
PLUS
8 10 12 14 16 18 20
>plus <- kurz+kurz
>plus

[1] 8 10 12 14 16 18 20
Dividieren
DIVI KURZ KURZ
DIVI
1 1 1 1 1 1 1
>divi <- kurz/kurz
>divi

[1] 1 1 1 1 1 1 1
Datentypen, Eigenschaften von Vektoren und Arrays
Datentyp Vektor?
VEK
1

>is.vector(vek)

[1] T (T heißt True)
Datentyp numerisch? (APL-Idiom)
0 = 0 VEK
1

>mode(vek)

[1] "numeric"
DISPLAY VEK
>is.character(vek)

[1] F
Skalar-Erweiterung
EXTENS 1+VEK
EXTENS
2 3 4 5 6 7 8 9 10 11
>extens <- 1+vek
>extens

[1] 2 3 4 5 6 7 8 9 10 11
Folgen. Folge von 1 bis -1
APL ist rechtsassoziativ. Spiegeln mit
2+ 3
S-Plus oder R ist linksassoziativ.
>1:-1

[1] 1
Gerade Zahlen von 2 bis 10
2 5
2 4 6 8 10
>seq(2,by=2,along=1:5) oder
>2*1:5
[1] 2 4 6 8 10
Ungerade Zahlen von 1 bis 9
1+2 5
1 3 5 7 9

Es gibt keine arithmetische Hierarchie.
>seq(1,by=2,along=1:5) oder
>-1+2*1:5
[1] 2 4 6 8 10

Punktrechnung geht vor Strichrechnung.
Folge von 1.2 bis 4
.2+ 3
1.2 2.2 3.2
>1.2:4
[1]1.2 2.2 3.2
Auswählen mit Index
SEL VEK[10 10 3 1]
SEL
10 10 3 1
>sel<-vek[c(10,10,3,1)]
>sel

[1] 10 10 3 1
Without (~) im APL Negativer Index im S-Plus oder R
VEK[( VEK)~4]
1 2 3 5 6 7 8 9 10
>vek[-4]

[1] 1 2 3 5 6 7 8
Auswählen mit logischer Abfrage
(VEK 5)/VEK
1 2 3 4 5
(<= heißt kleiner gleich)
>vek[vek<=5]
[1] 1 2 3 4 5
Logische Abfrage und selektive Zuweisung mit missing value
((VEK 1)/VEK) ''
DISPLAY VEK
Im S-Plus oder R heißt NA fehlender Wert.
>vek[vek<=1] <- NA
>vek
[1] NA 2 3 4 5 6 7 8 9 10
Wiederholung von Objekten, Datentyp character
DISPLAY 3/ 'Heute'
>rep("Heute",3)

[1]"Heute" "Heute" "Heute"
Wiederholung von Objekten, Datentyp logical
Strukturierte Wiederholung.
bool2 1 1 0
DISPLAY bool
>bool<-rep(c(T,T,F),2)

[1] T T F T T F
Im APL Struktur auflösen mit Enlist ( )
DISPLAY 2/ 1 1 0
Datentyp logical
Im APL gibt es nur 1 oder 0 als logische Werte.

Prüfen mit APL-Idiom:
^/ ( bool) 0 1
1
Logische Werte im S-Plus oder R:
T heißt True oder 1
F heißt False oder 0

>is.logical(bool)
[1] T
Strings
TEXTVEK 'Dies ist ein Textvektor'
TEXTVEK
23
DISPLAY TEXTVEK
>textvek <- "This is a string"
>length(textvek)
[1] 1
>mode(textvek)
[1] "character"
Nested arrays im APL2 Vektoren im S-Plus oder R
TRENNVEK 'Jedes' 'Wort' 'fuer' 'sich'
TRENNVEK
4
DISPLAY TRENNVEK
>trennvek <- c("This","is","a","string")
>length(trennvek)

[1] 4

>mode(trennvek)

[1] "character"
Gemischte Strukturen im APL2 Listen im S-Plus oder R
LISTVEK ( 3) 'Mitte' 'Ende'
LISTVEK
3
DISPLAY LISTVEK
>listvek <- list(c(1:3),"Mitte","Ende")
>length(listvek)

[1] 3

>mode(listvek)

[1] "list"

>mode(listvek[[1]])
[1] "numeric"
Auswählen aus Listen
DISPLAY LISTVEK[1 3]


Summe von subarrays. APL mit Each ( )
+/ LISTVEK[1]
6
>listvek[c(3,1)]

[[3]]:
[1] "Ende"
[[1]]:
[1] 1 2 3

>sum(listvek[[1]]

[1] 6

Matrizen (2-dimensionale Arrays)

Aufspannen einer Matrix
Die Matrix wird im APL zeilenweise aufgespannt.

MAT1 5 2 10
MAT1
1  2
3  4
5  6
7  8
9 10
Die Matrix wird im S-Plus oder R spaltenweise
aufgespannt. Es gibt aber die Option byrow.

>mat1 <- matrix(1:10,ncol=2,byrow=T)
>mat1
    [,1] [,2]
[1,]   1    2
[2,]   3    4
[3,]   5    6
[4,]   7    8
[5,]   9   10
MAT2 2 2 4
MAT2
4  3
2  1
>mat2 <- matrix(4:1, ncol=2,byrow=T)
>mat2
    [,1] [,2]
[1,]   4    3
[2,]   2    1
Verbinden entlang von Achsen (1. Zeilenverbinden)
COMB MAT1,[1]MAT2
COMB
1  2
3  4
5  6
7  8
9 10
4  3
2  1
>comb <- rbind(mat1,mat2)
>comb
    [,1] [,2]
[1,]   1    2
[2,]   3    4
[3,]   5    6
[4,]   7    8
[5,]   9   10
[6,]   4    3
[7,]   2    1
Verbinden entlang von Achsen (2. Spaltenverbinden)
Im APL kann die Achsenangabe weggelassen
werden, wenn die letzte Achse gemeint ist.
COMB,COMB
1  2 1  2
3  4 3  4
5  6 5  6
7  8 7  8
9 10 9 10
4  3 4  3
2  1 2  1

>cbind(comb,comb)
      [,1] [,2] [,3] [,4]
[1,]     1    6    1    6
[2,]     2    7    2    7
[3,]     3    8    3    8
[4,]     4    9    4    9
[5,]     5   10    5   10
[6,]     4    2    4    2
[7,]     3    1    3    1
Funktionen entlang von Achsen.
ADD +/[1]COMB
ADD
31 34
(Im S-Plus oder R leider Achse 2!)
>add <- apply(comb,2,sum)
>add
[1] 31 34
MIT 1 AVGMA COMB
MIT
4.4285 4.8571
>mit<-apply(comb,2,mean)
>mit

[1] 4.428571 4.857143

3-D-Array

Aufspannen eines 3-D-Array
DREIDIM 2 3 4 24
>dreidim <- array(1:24,dim=4:2)
DISPLAY DREIDIM
> dreidim
, , 1
     [,1] [,2] [,3]       
[1,]    1    5    9
[2,]    2    6   10
[3,]    3    7   11
[4,]    4    8   12
, , 2
     [,1] [,2] [,3]
[1,]   13   17   21
[2,]   14   18   22
[3,]   15   19   23
[4,]   16   20   24

Objekte im Workspace, Löschen, Speichern, Importieren

Liste der Daten-Objekte
)vars (Taste F1)
>objects()
Liste der vorhandenen oder selbstdefinierten Funktionen
)fns (Taste F2)
>library()
Löschen von Objekten
)erase [var1 var2 ..fn1..]
>rm(var1,var2,..,fn1,...)
Unspezifisches Speichern
Wenn man APL durch Menü mit
)CONTINUE
verläßt, sind beim nächsten Programmstart alle Variablen und Programme wieder im Workspace vorhanden.
Alle S-Plus oder R Objekte werden, wenn man
nichts anders angibt, in der Directory
./Data gepeichert. Sie sind beim
nächsten Start automatisch verfügbar.
Spezifisches Speichern
Bilden von Transferfiles, Worksspaces oder Objektfiles (mit AP 211).
)out filename [var1..var2..fn1..fn2..]

)save wsname [var1..var2..fn1..fn2..]
Einrichten von UNIX-function-Directories
(z.B. mkdir mydata)

>attach("/usr/[pfad]/mydata")
>assign("fn1","fn2",where=n)

n ist die library-number, die man vorher mit

>search()

ermitteln kann.
Datenimport
Textfiles (Ascii)
DAT FM 'mydata.txt'

>dat<-scan("mydata.txt")
Tabellen mit Textspalten
TAB IMPORT '/home/stat/datasets/datana/bsrtag.txt'
S-Plus oder R-Data-frames (Listen)

>tab<-read.table("/home/stat/
datasets/datana/bsrtag.txt",header=T)
Lesen aus einer Datenbank mit shared variables
)copy 1 UTILITY SVOPAIR

210 SVOPAIR 'c1' 'd1'

c1 'IR,/home/stat/datana/bsrtag.210'

c1 4 (4 heißt Daten lesen)

TAB d1 (die Daten stehen auf d1)
von Martin Barghoorn und Carsten Schenke, TU-Berlin
People read this page. Since 1.9.96