Lær R | Del 2 | Variabler & Funktioner
Variabler
x <- (1:10)x = (1:10)(1:10) -> xassign("x", 1:10)
Alle ovenstående måder tildeler en array fra 1 til 10 til variablen x.
Disse er tildelingsoperatorerne =, ->, <- .
En anden almindelig funktion til at oprette en vektor eller en liste er funktionen c(…).
c(1,10:13)Outputtet for dette ville være en array1 10 11 12 13. Dette betyder sammensætning af kommaseparerede objekter/variabler.c(1:5, 10.5, "next")Outputtet for dette ville være en array"1" "2" "3" "4" "5" "10.5" "next".y = c(1,2,3)&x = c(y, 1, y)Dette er et eksempel på brug af variabler til at oprette nye variabler. Her ville værdien afyvære1 2 3, mens værdien afxville være1 2 3 1 1 2 3.
For yderligere brug af funktionen c(…) se -
Indbyggede funktioner
c(…)— Som forklaret ovenfor.ls()ellerobjects()— Giver en liste over eksisterende objekter, der er oprettet.rm("x")— Sletter et objekt. Parameteren er navnet på objektet.sum("x")— Giver summen af vektorenx. For eksempel, hvisxer1 2 3 1 1 2 3så villesum("x")være13.sqrt("x")— Giver kvadratroden af vektorenx. For eksempel hvisxer1 4 9så villesqrt("x")være en anden vektor med værdier1 2 3.seq(…)— Denne funktion bruges til at generere en sekvens af tal. Den tager forskellige parametre somfrom(Startværdi for sekvensen),to(Slutværdi for sekvensen),by(Antal, hvormed sekvensen skal øges),length.out(Længde af sekvens) ogalong.with(Dette er en liste over vektor med længden n og bruges kun til at få længden af denne passerede liste. Mærkeligt 😷) Eksempel:-seq(from=1, to=4, by=0.5)— Giver en sekvens fra1til4med0.5increment. Mere omseq(…)her.paste(…)Denne funktion bruges til at lave strenge ved hjælp af en sammenkædning af vektorer ved brug af 2 parametre nemligsep&collapse.sepgiver en separator mellem de sammenkædede vektorer, menscollapsegiver en separator, der sammenkæder værdierne i den sammenkædede vektor. (Inception? 🤒) Lad os lære det med nogle eksempler.paste("xyz", 1:3)—"xyz 1" "xyz 2" "xyz 3"(Dette er udensep&collapse)paste("xyz", c(1,2,"variable",3), sep=",")—"xyz,1" "xyz,2" "xyz,variable" "xyz,3"(Dette er kun medsep)paste(c(1:5), c(5:10), sep = ": ", collapse = "; ")—"1: 5; 2: 6; 3: 7; 4: 8; 5: 9; 1: 10"(Dette er medsepogcollapse; Bemærk her, at dette danner en enkelt streng 😄.) Mere ompaste(…)her.rep(x, …)— Som navnet antyder, bruges denne funktion til at gentage den eksisterende vektor. De parametre, som denne funktion kan tage, ertimes(Antal gange vektoren skal gentages),length.out(Ønsket længde på outputvektor) &each(Antal gange hvert element i vektoren skal gentages)rep(c(1,2,3), 3) or rep(c(1:3), times=3)—1 2 3 1 2 3 1 2 3rep(c(1:3), each=3)—1 1 1 2 2 2 3 3 3Mere omrep(x, …)her.
Brugerdefinerede funktioner
Eksemplet nedenfor viser en simpel måde at skrive en enlinjet funktion, der returnerer kvadratet på en variabel. Funktionsnavnet her er fn.
fn <- function(a) {a*a}
fn(10)
Eksempel på en kodeblok i en funktion.
fn -> function(a, b) {
c = a * b
c = c + b
print(x)
}
fn(10, 20)
Funktioner med loops,if-else.
primeNumber = function(n) {
if(n>=2) {
s = seq(2,n) p = c() #Initialiser vektoren, som gemmer primtal
for(i in seq(2,n)) {
if(any(s == i) {
p = c(p, i)
s = c(s[(s%%i) != 0], i)
}
}
return(p)
} else {
stop("Input større end 2")
}
}
Eksemplet ovenfor returnerer en vektor med alle primtallene op til n sendt til funktionen. Funktionen stop her stopper udførelsen og kaster en fejl.
Det indledende p = c() bruges til at initialisere vektoren, som gemmer primtallet. Og s = seq (2,n) bruges til at initialisere vektoren til, som derefter loopes.
Loopet kontrollerer, om værdien findes i vektoren s, defineret tidligere ved hjælp af funktionen any. Og hvis den matcher, så tilføjer den den værdi til primvektoren og opdaterer vektoren, der skal kontrolleres med, dvs. s med alle tal, der ikke kan deles med det aktuelle i
I slutningen af loopet indeholder p vektoren alle primtallene.
Referencer
Tak for læsningen. I min næste artikel forklarer jeg plotfunktioner. Bortset fra det nogle indsigter om pakker & datasæt.
Hvis du ikke har læst del 1, kan du læse den her.
Stil dine spørgsmål nedenfor. Forslag er velkomne. 🙌



