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



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow