R Language
Klasser
Sök…
Introduktion
Klassen för ett dataobjekt avgör vilka funktioner som ska bearbeta innehållet. Den class
-attribute är ett tecken vektor, och objekt kan ha noll, en eller flera klasser. Om det inte finns något klassattribut kommer det fortfarande att finnas en implicit klass bestämd av ett objekts mode
. Klassen kan inspekteras med funktionen class
och det kan ställas in eller ändras av class<-
funktion. S3-klasssystemet etablerades tidigt i S: s historia. Det mer komplexa S4-klasssystemet etablerades senare
Anmärkningar
Det finns flera funktioner för att kontrollera "typ" av ett objekt. Den mest användbara funktionen är class
, även om det ibland är nödvändigt att undersöka ett objekts mode
. Eftersom vi diskuterar "typer", kan man tänka att typeof
skulle vara användbart, men i allmänhet kommer resultatet från mode
att vara mer användbart, eftersom objekt utan uttrycklig "klass" -attribut kommer att ha funktionsutsändning bestämd av "implicit class" bestämd av deras läge.
vektorer
Den mest enkla datastrukturen som finns i R är en vektor. Du kan skapa vektorer med numeriska värden, logiska värden och teckensträngar med funktionen c()
. Till exempel:
c(1, 2, 3)
## [1] 1 2 3
c(TRUE, TRUE, FALSE)
## [1] TRUE TRUE FALSE
c("a", "b", "c")
## [1] "a" "b" "c"
Du kan också gå med i vektorer med funktionen c()
.
x <- c(1, 2, 5)
y <- c(3, 4, 6)
z <- c(x, y)
z
## [1] 1 2 5 3 4 6
En mer detaljerad behandling av hur man skapar vektorer kan hittas i ämnet "Skapa vektorer"
Inspektera klasserna
Varje objekt i R tilldelas en klass. Du kan använda class()
att hitta objektets klass och str()
att se dess struktur, inklusive klasserna det innehåller. Till exempel:
class(iris)
[1] "data.frame"
str(iris)
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 ...
class(iris$Species)
[1] "factor"
Vi ser att iris har klassen data.frame
och med str()
kan vi undersöka data.frame
inuti. Variabeln Arter i irisdataramen är av klassfaktor, i motsats till de andra variablerna som är av klassnummer. Funktionen str()
ger också längden på variablerna och visar de första observationerna, medan funktionen class()
endast ger objektets klass.
Vektorer och listor
Data i R lagras i vektorer. En typisk vektor är en sekvens av värden som alla har samma lagringsläge (t.ex. teckenvektorer, numeriska vektorer). Se ?atomic
för detaljer om de atomära implicita klasserna och deras motsvarande lagringslägen: "logical", "integer", "numeric" (synonym "double"), "complex", "character"
och "raw"
. Många klasser är helt enkelt en atom vektor med en class
-attribut på toppen:
x <- 1826
class(x) <- "Date"
x
# [1] "1975-01-01"
x <- as.Date("1970-01-01")
class(x)
#[1] "Date"
is(x,"Date")
#[1] TRUE
is(x,"integer")
#[1] FALSE
is(x,"numeric")
#[1] FALSE
mode(x)
#[1] "numeric"
Listor är en speciell typ av vektor där varje element kan vara vad som helst, till och med en annan lista, därav R-termen för listor: "rekursiva vektorer":
mylist <- list( A = c(5,6,7,8), B = letters[1:10], CC = list( 5, "Z") )
Listor har två mycket viktiga användningsområden:
Eftersom funktioner bara kan returnera ett enda värde är det vanligt att returnera komplicerade resultat i en lista:
f <- function(x) list(xplus = x + 10, xsq = x^2) f(7) # $xplus # [1] 17 # # $xsq # [1] 49
Listor är också den underliggande grundläggande klassen för dataramar . Under huven är en dataram en lista över vektorer som alla har samma längd:
L <- list(x = 1:2, y = c("A","B")) DF <- data.frame(L) DF # x y # 1 1 A # 2 2 B is.list(DF) # [1] TRUE
Den andra klassen rekursiva vektorer är R-uttryck, som är "språk" - objekt