Video: (1 of 2) Electricity and Magnetism - Review of All Topics - AP Physics C 2024
Användning av slingor i R är väldigt praktisk, men du kan skriva mer effektiv kod om du inte går över värden men över indexen. För att göra så byter du mittpartiet i funktionen med följande kod:
nclient <- längd (kund) moms <- numeric (nclient) för (jag i seq_along (klient)) {moms [i] <- switch (klient [i], privat = 1, 12, allmän = 1, 06, 1))}
Här är några skillnader från att använda värden för vektorn för looping:
-
Du tilldelar vektorklientens längd till variabeln nclient.
-
Då skapar du en numerisk vektormoms som är precis så lång som vektorklienten. Detta kallas förallokering av en vektor.
-
Sedan slår du över index av klient istället för själva vektorn genom att använda funktionen seq_along (). I det första passet genom slingan ställs det första värdet i moms in som ett resultat av omkopplaren () som tillämpas på det första värdet i klienten. I det andra passet är det andra värdet av moms resultatet av omkopplaren () som tillämpas på det andra värdet i klienten och så vidare.
Du kan vara frestad att ersätta seq_along (klient) med vektorn 1: nclient, men det skulle vara en dålig idé. Om vektorklienten har en längd på 0, skapar seq_along (klient) en tom vektor och koden i slingan utförs aldrig. Om du använder 1: nclient skapar R en vektor c (1, 0) och slingrar över de två värdena, vilket ger dig ett felaktigt resultat.
Varje gång du förlänger ett objekt i R måste R kopiera hela objektet och flytta det till en ny plats i minnet. Detta har två effekter:
-
För det första saktar du ner koden, för all kopiering tar tid.
-
För det andra, eftersom R kontinuerligt rör saker i minnet blir det här minnet uppdelat i många små utrymmen.
Detta kallas fragmentering, och det gör kommunikationen mellan R och minnet mindre slät. Du kan undvika denna fragmentering med förallokering -minne som i föregående exempel.