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
|
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
|
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
|
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