R Language
variabler
Sök…
Variabler, datastrukturer och grundläggande operationer
I R manipuleras dataobjekt med namngivna datastrukturer. Objekten kan kallas "variabler" även om det uttrycket inte har någon specifik betydelse i den officiella R-dokumentationen. R-namn är skiftlägeskänsliga och kan innehålla alfanumeriska tecken ( az
, Az
, 0-9
), punkten / perioden ( .
) Och understreck ( _
). För att skapa namn för datastrukturerna måste vi följa följande regler:
Namn som börjar med en siffra eller en understruk (t.ex.
1a
) eller namn som är giltiga numeriska uttryck (t.ex..11
) eller namn med bindestreck ('-') eller mellanslag kan endast användas när de citeras:`1a`
och`.11`
. Namnen kommer att skrivas ut med backticks:list( '.11' ="a") #$`.11` #[1] "a"
Alla andra kombinationer av alfanumeriska tecken, prickar och understreck kan användas fritt, där hänvisning med eller utan baksida pekar på samma objekt.
Namn som börjar med
.
betraktas som systemnamn och är inte alltid synliga med funktionenls()
.
Det finns ingen begränsning för antalet tecken i ett variabelt namn.
Några exempel på giltiga objektnamn är: foobar
, foo.bar
, foo_bar
, .foobar
I R tilldelas variabler värden med operatören för infix-tilldelning <-
. Operatören =
kan också användas för att tilldela värden till variabler, men dess korrekta användning är för att associera värden med parameternamn i funktionssamtal. Observera att utelämnande av utrymmen runt operatörerna kan skapa förvirring för användare. Uttrycket a<-1
analyseras som tilldelning ( a <- 1
) snarare än som en logisk jämförelse ( a < -1
).
> foo <- 42
> fooEquals = 43
Så foo
tilldelas värdet 42
. Att skriva foo
inom konsolen kommer att mata ut 42
, medan att skriva fooEquals
kommer att mata ut 43
.
> foo
[1] 42
> fooEquals
[1] 43
Följande kommando tilldelar ett värde till den variabel som heter x
och skriver ut värdet samtidigt:
> (x <- 5)
[1] 5
# actually two function calls: first one to `<-`; second one to the `()`-function
> is.function(`(`)
[1] TRUE # Often used in R help page examples for its side-effect of printing.
Det är också möjligt att göra tilldelningar till variabler med ->
.
> 5 -> x
> x
[1] 5
>
Typer av datastrukturer
Det finns inga skalartatatyper i R. Vektorer med längd-en fungerar som skalar.
- Vektorer: Atomvektorer måste vara sekvenser av objekt av samma klass: en sekvens av siffror, eller en sekvens med logiska eller en sekvens av tecken.
v <- c(2, 3, 7, 10)
,v2 <- c("a", "b", "c")
är båda vektorer. - Matriser: En matris med siffror, logiska eller tecken.
a <- matrix(data = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), nrow = 4, ncol = 3, byrow = F)
. Liksom vektorer måste matris göras av element av samma klass. För att extrahera element från en matris måste rader och kolumner anges:a[1,2]
returnerar[1] 5
som är elementet på den första raden, den andra kolumnen. - Listor: sammanlänkning av olika element
mylist <- list (course = 'stat', date = '04/07/2009', num_isc = 7, num_cons = 6, num_mat = as.character(c(45020, 45679, 46789, 43126, 42345, 47568, 45674)), results = c(30, 19, 29, NA, 25, 26 ,27) )
. Utdragning av element från en lista kan göras med namn (om listan heter) eller per index. I det givna exemplet fårmylist$results
ochmylist[[6]]
samma element. Varning: om du försökermylist[6]
kommer R inte att ge dig ett fel, men det extraherar resultatet som en lista. Medanmylist[[6]][2]
är tillåtet (det ger dig 19), germylist[6][2]
dig ett fel. - data.frame: objekt med kolumner som är vektorer med samma längd, men (eventuellt) olika typer. De är inte matriser.
exam <- data.frame(matr = as.character(c(45020, 45679, 46789, 43126, 42345, 47568, 45674)), res_S = c(30, 19, 29, NA, 25, 26, 27), res_O = c(3, 3, 1, NA, 3, 2, NA), res_TOT = c(30,22,30,NA,28,28,27))
. Kolumner kan läsas efterexam$matr
,exam[, 'matr']
eller genom indexexamenexam[1]
,exam[,1]
. Rader kan också läsas efterexam['rowname', ]
eller indexexamenexam[1,]
. Dataframe är faktiskt bara listor med en viss struktur (rownames-attribut och komponenter med samma längd)
Vanliga operationer och några försiktiga råd
Standardåtgärder görs element för element. Se ?Syntax
för reglerna för operatörens företräde. De flesta operatörer (och kan andra funktioner i bas R) har återvinningsregler som tillåter argument av ojämn längd. Med tanke på dessa objekt:
Exempelobjekt
> a <- 1
> b <- 2
> c <- c(2,3,4)
> d <- c(10,10,10)
> e <- c(1,2,3,4)
> f <- 1:6
> W <- cbind(1:4,5:8,9:12)
> Z <- rbind(rep(0,3),1:3,rep(10,3),c(4,7,1))
Vissa vektoroperationer
> a+b # scalar + scalar
[1] 3
> c+d # vector + vector
[1] 12 13 14
> a*b # scalar * scalar
[1] 2
> c*d # vector * vector (componentwise!)
[1] 20 30 40
> c+a # vector + scalar
[1] 3 4 5
> c^2 #
[1] 4 9 16
> exp(c)
[1] 7.389056 20.085537 54.598150
Vissa vektoroperationer Varningar!
> c+e # warning but.. no errors, since recycling is assumed to be desired.
[1] 3 5 7 6
Warning message:
In c + e : longer object length is not a multiple of shorter object length
R summerar vad det kan och återanvänder sedan den kortare vektorn för att fylla i ämnen ... Varningen gavs bara för att de två vektorerna har längder som inte är exakt multiplar. c + f # ingen varning överhuvudtaget.
Vissa Matrix-operationer Varning!
> Z+W # matrix + matrix #(componentwise)
> Z*W # matrix* matrix#(Standard product is always componentwise)
För att använda en matrismultiplicera: V% *% W
> W + a # matrix+ scalar is still componentwise
[,1] [,2] [,3]
[1,] 2 6 10
[2,] 3 7 11
[3,] 4 8 12
[4,] 5 9 13
> W + c # matrix + vector... : no warnings and R does the operation in a column-wise manner
[,1] [,2] [,3]
[1,] 3 8 13
[2,] 5 10 12
[3,] 7 9 14
[4,] 6 11 16
"Privata" variabler
En ledande punkt i ett namn på en variabel eller funktion i R används vanligen för att beteckna att variabeln eller funktionen är tänkt att vara dold.
Så förklara följande variabler
> foo <- 'foo'
> .foo <- 'bar'
Och sedan använder ls
funktionen för att lista objekt kommer bara att visa det första objektet.
> ls()
[1] "foo"
Att överföra all.names = TRUE
till funktionen visar dock den "privata" variabeln
> ls(all.names = TRUE)
[1] ".foo" "foo"