Cursus
Een array is een datastructuur die multidimensionale data kan bevatten. In R zijn arrays objecten die twee of meer dimensies kunnen hebben. In bijvoorbeeld vierkante matrices kunnen er twee rijen en twee kolommen zijn en kan de dimensie vijf aannemen. Arrays kunnen alleen waarden opslaan van hetzelfde datatype. De data kan meer dan eendimensionaal zijn, met rijen en kolommen en dimensies van een bepaalde lengte.
Aanmaken van een array
De functie array() maakt een array op basis van een vector (getallen) en een dimensie ('dim') als argument.
Bekijk het onderstaande voorbeeld waarin twee vectoren met de namen 'array1' en 'array2' worden gemaakt.
vector1 = c (5, 10, 15,20)
vector2 = c (25, 30, 35, 40, 45, 50,55,60)
Je kunt de twee bovenstaande vectoren als invoer voor een array gebruiken waarbij de dimensie wordt beschouwd als 4 * 4, en er twee matrices of dimensionale data worden gecreëerd.
final = array (c (array1, array2),dim =c(4,4,3))
print (final)
De output van de bovenstaande code is als volgt:
, , 1
[,1] [,2] [,3] [,4]
[1,] 5 25 45 5
[2,] 10 30 50 10
[3,] 15 35 55 15
[4,] 20 40 60 20
, , 2
[,1] [,2] [,3] [,4]
[1,] 25 45 5 25
[2,] 30 50 10 30
[3,] 35 55 15 35
[4,] 40 60 20 40
, , 3
[,1] [,2] [,3] [,4]
[1,] 45 5 25 45
[2,] 50 10 30 50
[3,] 55 15 35 55
[4,] 60 20 40 60
Laten we onze array hernoemen naar "Arr1" en "Arr2" met behulp van "matrix.names". Ook worden de rijnamen gewijzigd naar ("row1","row2") en de kolomnamen naar ("column1","column2","column3"). De dimensie van de matrix is 2 rijen en 3 kolommen.
array1 = c (9 , 18 )
array2 = c (27,36)
r.names = c ("column1","column2","column3")
c.names = c ("row1","row2")
m.names = c ("Arr1", "Arr2")
final = array (c (array1,array2), dim=c (2,3,2), dimnames=list (c.names, r.names, m.names))
print(final)
De output van de bovenstaande code staat hieronder, met twee rijen en drie kolommen. Ook wordt de waarde in de kolom herhaald zodra deze is afgelopen:
, , Arr1
column1 column2 column3
row1 9 27 9
row2 18 36 18
, , Arr2
column1 column2 column3
row1 27 9 27
row2 36 18 36
Indexeren in een array
Een array bestaat uit elementen op een multidimensionale manier waarbij elk element kan worden benaderd voor bewerkingen. De elementen kunnen worden geïndexeerd met '[]', waarbij array-achtige matrices bestaan uit rijen en kolommen die je kunt indexeren als: mat[row, column]
Laten we onderstaand voorbeeld nemen, waar de array vectorinvoer van 1 tot 9 bevat. Er zijn slechts drie rijen en drie kolommen waarin de waarden van 1 tot en met 9 zijn opgenomen. De 'c.names)' is de nieuwe kolomnaam met de vector ('c1', 'c2', 'c3') en 'r.names' zijn de nieuwe rijnamen ('r1', 'r2', 'r3'), ook als vector.
a1= c (1,2,3,4)
a2= c (5,6,7,8,9)
r.names = c ("c1","c2","c3")
c.names = c ("r1","r2","r3")
m.names = c ("first")
arr = array (c (a1,a2), dim=c (3,3,1), dimnames=list (c.names, r.names, m.names))
print(arr)
, , first
c1 c2 c3
r1 1 4 7
r2 2 5 8
r3 3 6 9
De output van de bovenstaande code is als volgt:
, , first
c1 c2 c3
r1 1 4 7
r2 2 5 8
r3 3 6 9
Je ziet dat de matrices van 1 tot 9 zijn gegenereerd met een 3 3-dimensie (rij kolom)-vorm, en dat de namen van rijen en kolommen zijn gewijzigd.
Laten we bekijken hoe de elementen in de array kunnen worden opgehaald met de volgende voorbeelden.
- Laten we het getal '7' uit de bovenstaande array 'arr' halen.
arr[1,3,1]
7
De output van de bovenstaande code is 7. In 'arr[1,3,1]' wordt rij 1 met kolom 3 en 1 is de eerste array 'arr' die wordt opgehaald.
- Om 1 te benaderen: met 'arr[1,1,1]' wordt rij 1 met kolom 1 en 1 is de eerste array 'arr' opgehaald.
arr[1,1,1]
1
De output van de bovenstaande code is 1.
- Om meerdere waarden tegelijk te benaderen, moet je het gewenste bereik opgeven.
arr[1:2,1:2,1]
| c1 | c2 | |
|---|---|---|
| r1 | 1 | 4 |
| r2 | 2 | 5 |
De bovenstaande code geeft de volgende output, waarin de waarden met 2 rijen, 2 kolommen en 1 als de eerste array 'arr' worden opgehaald:
c1 c2
r1 1 4
r2 2 5
- Je kunt de volledige array 'arr' opvragen met de volgende syntaxis, waarbij 'arr[ , ,1]' aangeeft dat alle rijen en kolommen moeten worden opgenomen, elk gescheiden door komma's die worden aangeduid door een spatie. De 1 specificeert de array 'arr' die moet worden opgehaald.
arr[ , ,1]
| c1 | c2 | c3 | |
|---|---|---|---|
| r1 | 1 | 4 | 7 |
| r2 | 2 | 5 | 8 |
| r3 | 3 | 6 | 9 |
De bovenstaande code geeft de volgende output, waarin alle elementen aanwezig zijn:
c1 c2 c3
r1 1 4 7
r2 2 5 8
r3 3 6 9
- Je kunt de volledige tweede rij opvragen met de volgende code, waarbij arr[2, ,1] de tweede rij pakt met een spatie, en 1 de 'arr' is die moet worden opgehaald.
arr[2,,1]
- c1
- 2
- c2
- 5
- c3
- 8
De bovenstaande code geeft de volgende output en print ook c1, c2, c3.
c1 2
c2 5
c3 8
- Je kunt de volledige tweede kolom opvragen met de volgende code, waarbij arr[,2,1] met 2 de tweede kolom is, en 1 de 'arr' die moet worden opgehaald.
mat[ ,2,1]
- r1
- 4
- r2
- 5
- r3
- 6
De bovenstaande code geeft de volgende output en print ook r1, r2, r3.
r1 4
r2 5
r3 6
Matrix aanmaken en optellen
Laten we een matrix met de naam mat1 en mat2 maken uit 'arr[ , ,1]' waarbij alle rijen en kolommen uit 'arr' worden gekopieerd.
mat1 = arr[,,1]
mat2 = arr[,,1]
c1 c2 c3
r1 2 8 14
r2 4 10 16
r3 6 12 18
Tel de twee matrices 'mat1' en 'mat2' bij elkaar op en sla het resultaat op in final. De output wordt ook geprint.
final <- mat1+mat2
print(final)
De onderstaande output laat zien dat elke rij en kolom van mat1 en mat2 bij elkaar zijn opgeteld.
c1 c2 c3
r1 2 8 14
r2 4 10 16
r3 6 12 18
apply()
'apply()' is een van de R-packages met verschillende functies die helpen om eenvoudiger en efficiënter code te schrijven. Hieronder zie je een voorbeeld waarin het wordt gebruikt om de som van twee verschillende arrays te berekenen.
De syntaxis voor apply() is:apply(x, margin, function)
Het bovenstaande argument geeft aan dat:
x: Een array of tweedimensionale data als matrices.
margin: Geeft aan dat een functie wordt toegepast met als margewaarde c(1) voor rijen, c(2) voor kolommen, en c(1,2) voor zowel rijen als kolommen.
function: Geeft de in R ingebouwde of door de gebruiker gedefinieerde functie aan die op de gegeven data moet worden toegepast.
Laten we een vector met de naam 'array1' van lengte drie en 'array2' van lengte zes maken met de volgende code.
array1 = c(5,10,15)
array2 = c(15,20,25,30,35,40)
Hieronder zie je dat 'array()' twee vectoren 'array1' en 'array2' accepteert met een dimensie van 3 rijen, 3 kolommen, en dat er 2 matrices worden gemaakt en opgeslagen in 'my. Array'.
my.Array <- array(c(array1,array2),dim = c(3,3,2))
print(my.Array)
, , 1
[,1] [,2] [,3]
[1,] 5 15 30
[2,] 10 20 35
[3,] 15 25 40
, , 2
[,1] [,2] [,3]
[1,] 5 15 30
[2,] 10 20 35
[3,] 15 25 40
De bovenstaande code geeft de volgende output, waarbij twee matrices zijn gemaakt met de 3 3 (rijen kolommen).
, , 1
[,1] [,2] [,3]
[1,] 5 15 30
[2,] 10 20 35
[3,] 15 25 40
, , 2
[,1] [,2] [,3]
[1,] 5 15 30
[2,] 10 20 35
[3,] 15 25 40
'apply()' wordt hieronder gebruikt om de som van de twee matrices kolomsgewijs te berekenen.
final <- apply(my.Array, c(2), sum)
print(final)
[1] 60 120 210
Je ziet hierboven dat c(2) voor margin is gebruikt, waarbij de elementen van de matrix in 'my. Array' kolomsgewijs worden opgeteld om de volgende output te krijgen.
60 120 210
Tot slot wordt 'apply()' hieronder gebruikt om de som van de twee matrices rijsgewijs te berekenen.
final <- apply(my.Array, c(1), sum)
print(final)
[1] 100 130 160
Je ziet hierboven dat c(1) voor margin is gebruikt, waarbij de elementen van de matrix in 'my. Array' rijsgewijs worden opgeteld om de volgende output te krijgen.
100 130 160
Gefeliciteerd
Gefeliciteerd, je bent aan het einde van deze tutorial gekomen!
Je hebt R's Array leren kennen, inclusief het aanmaken ervan, indexeren in een array met voorbeelden, en ook het aanmaken en optellen van matrices samen met de apply()-functie.
Wil je meer leren over R? Volg dan DataCamp's Introduction to R-cursus.
Referenties:
R-Arrays
R Array Function and Create Array in R
