Introduktion til R #4

Der er gode og dårlige nyheder i forhold til min introduktionsbog til R, Introduktion til R. Lad os begynde med de gode nyheder. Bogen er taget i brug på flere uddannelsesinstitutioner (blandt andet på sociologi, hvilket jeg er ekstra glad for at høre). Hans Reitzels Forlag har således ytret interesse i at udgive en 3. udgave af bogen. Jeg har heldigvis en masse idéer til en ny udgave af bogen. Derfor kommer der en 3. udgave af Introduktion til R.

Den dårlige nyhed er, at bogen ikke skal forventes udgivet før om et års tid. Det er der fire grunde til. For det første tager ting tid. Jeg arbejder med R til daglig, men det er ikke mit fuldtidsarbejde at skrive en introduktionsbog til R. Det er udelukkende et lystbetonet projekt, som jeg nyder at arbejde på. Det giver forhåbentlig en energi, der kan mærkes i bogen, men det bevirker også, at jeg skal have mere tid og luft i kalenderen end blot et par måneder, før jeg sandsynligvis er tilfreds med arbejdet.

For det andet ønsker jeg at have tilstrækkeligt med tid til ikke blot at modtage feedback fra dem, der bruger bogen, men også tid til at tage forslag til forbedringer om bord. Når en bog bliver taget i brug på diverse uddannelsesinstitutioner, er det vigtigt, at en ny udgave kan tages i brug uden at de undervisere, der allerede bruger bogen, skal ændre deres undervisningsmateriale og struktur. Derfor er det godt at have tid til at sørge for, at de forslag, der er til tilføjelser og ændringer, kan adresseres uden de store omkostninger for de undervisere, der er tilfredse med bogens indhold og struktur i 2. udgave.

For det tredje er ambitionsniveauet for en tredje udgave stort nok til, at det ikke giver mening at udgive en ny udgave inden for de næste måneder. Det handler ikke blot om at ændre kode hist og her, tilføje mere tekst, forbedre formidlingen af kompliceret stof osv. Jeg har eksempelvis konkrete idéer til, hvordan jeg kan forbedre det bagvedliggende setup til bogen, som vil gøre det muligt ikke alene at sikre, at R-koden i bogen er robust, men også at man let og systematisk kan sammenligne den seneste udgave med tidligere udgaver i forhold til, hvor og hvordan R-koden er forældet (og i værste fald ikke længere virker). Det handler med andre ord om langt mere end blot at redigere lidt tekst og kode.

For det fjerde er det en mere langsommelig proces at udgive en bog. Der skal læses korrektur. Den skal forbi forlaget. Den skal trykkes i fysisk form. Den skal ud i handlen. Og så videre. Så selv hvis jeg havde en 3. udgave liggende klar, ville det tage godt med tid, før du ville have bogen mellem hænderne.

Jeg har det ligeledes bedst med, at der er nævneværdige ændringer fra 2. udgave til 3. udgave, som alle direkte fører til en bedre bog – herunder gerne minimum et nyt kapitel med mere materiale. Jeg introducerede større ændringer i mit arbejde med 2. udgave, og en ny udgave skal gerne have en selvstændig eksistensberettigelse, der viser, at der er kvalitative forbedringer. Så selvom studerende og andre stadig vil kunne bruge 1. og 2. udgave til at lære R, vil jeg sørge for, at dem, der anvender 3. udgave, får et signifikant bedre produkt (hvis ikke p < 0,01, så i hvert fald p < 0,05). Hans Reitzels Forlag er heldigvis af samme overbevisning, hvorfor nævnte tidshorisont også giver mening for dem. Det er derfor med ro i sjælen, at jeg kan garantere en endnu bedre udgave af Introduktion til R, end den der allerede er på markedet.

Indtil den nye udgave af bogen er tilgængelig hos din foretrukne boghandel i 2026, kan du købe den stadig mere end brugbare 2. udgave her.

Det er efterhånden længe siden jeg lavede den sidste ændring i 2. udgave. Det kan være frustrerende ikke længere at kunne ændre noget, når man får en god idé eller finder en forbedring, der ligger lige til højrebenet. Eller som Richard McElreath beskriver arbejdet med 1. udgave af Statistical Rethinking i forordet til 2. udgave: “Really, I could have continued refining it every year. Going to press carries the penalty of freezing a dynamic process of both learning how to teach the material and keeping up with changes in the material. As time goes on, I see more elements of the book that I wish I had done differently.” Det gode ved således at kunne arbejde på en ny udgave er, at man får endnu en chance til at gøre det endnu bedre.

En god introduktionsbog til R giver i min optik en bred introduktion til så få funktioner og pakker som muligt, der lader en gøre så mange ting som muligt. Det er – alt andet lige – bedre at lære fem nyttige funktioner i én pakke, end fem nyttige funktioner i hver deres pakke. Kan man ligeledes lære én funktion, der kan gøre ti ting med lidt arbejde, står man betydeligt stærkere end hvis man skal bruge ti forskellige funktioner til at gøre de samme ti ting.

Det er med andre ord et af de tilfælde, hvor mindre er mere. Jo færre pakker der gøres brug af, desto større er sandsynligheden også for, at bogens kode fungerer i fremtiden. Udfordringen ved at være afhængig af en pakke, når man skriver en bog, er, at når pakken opdateres, virker ens gamle kode ikke nødvendigvis længere. Det er især tilfældet, hvis en pakke er afhængig af andre pakker. De fleste pakker til R er afhængig af en eller flere andre pakker (pakken {data.table} er en imponerende undtagelse). Det vil sige, at på samme måde som en R pakke kan være afhængig af andre pakker, kan en introduktionsbog til R også være afhængig af pakker (og ikke kun de pakker, der eksplicit nævnes).

Når en introduktionsbog til R udkommer er ikke alene indholdet låst fast i tid, men også i en kontekst hvor bogen beror på bestemte udgaver af diverse R pakker (og en bestemt version af R). I en undervisningsbog til samfundsvidenskabelige studerende arbejder vi med en antagelse om, at studerende altid vil arbejde med den nyeste udgave af R og de nyeste udgaver af diverse pakker, og dermed ikke skal installere ældre udgaver (eller endnu værre – også lære Docker, {renv}, etc.).

En introduktionsbog til R skal således ikke blot give en bred introduktion til R, som det fungerer i dag, men også en introduktion til R som det sandsynligvis fungerer i morgen. Der vil altid være usikkerhed forbundet med at skrive en bog, der også skal være lige så god om et år og om to år, men der er heldigvis ting, man kan gøre for, at denne usikkerhed reduceres. Det er noget af det, jeg blandt andet vil arbejde med i 3. udgave.

Som en tommelfingerregel er pakker, der har eksisteret længere, mere tilbøjelige til at have en robust API. Denne modenhed gør, at der sjældent sker større forandringer til de funktioner, der er i en pakke, samt at der er et større fokus på backward compatibility. Det er blandt andet en af grundene til, at jeg har det fint med at bruge pakkerne i tidyverse, da de gør et godt stykke arbejde i at sikre, at der ikke er problemer med ældre kode. 3. udgave vil således holde fast i tidyverse snarere end base R (ikke at man nødvendigvis skal vælge side, men jeg er grundlæggende enig med regel 8 i Hoffman og Wright 2024).

Jeg er stadig en stor tilhænger af {marginaleffects}, men da pakken er blevet opdateret med større ændringer over de seneste år, har jeg ikke længere tiltro til, at koden i de tidligere udgaver af ‘Introduktion til R’ vil fungere uden problemer. Hvis formålet udelukkende var at sælge bøger, ville det selvfølgelig blot være smart at opdatere koden hvert år og sikre, at der er brug for den nyeste udgave af bogen, men min intention er at sikre, at bogen fungerer som en tidløs introduktion til R, så man altid kan vende tilbage til bogen, uden at skulle være bekymret for, om indholdet stadig fungerer. Derfor er jeg ikke overbevist om, at 3. udgave vil gøre brug af {marginaleffects} i samme omfang som tilfældet er i 2. udgave.

Når man skriver en bog, især en bog med et pædagogisk sigte, står man på skuldrene af en masse materiale, som har formet ens syn på, hvordan man bedst lærer R. Jeg har set talrige videoer på YouTube og DataCamp og andre platforme over årene. Jeg har læst et utal af bøger om R og andre statistikprogrammer. Jeg har brugt tusindvis af timer i og med R. Det kan være svært at give en retvisende beskrivelse af, hvilket materiale der har gjort det største indtryk på, hvordan bogen ser ud. En af de primære inspirationskilder har dog uden tvivl været Stata – En praktisk introduktion, som jeg brugte til at lære Stata for 10-15 år siden. Det er selvsagt vanskeligt at skrive en introduktionsbog til R, men jeg er efterhånden stolt af, hvordan bogen ser ud. Jeg læser stadig en række forskellige introduktionsbøger til R (og Python) på engelsk, og jeg har efterhånden en lang liste af idéer til ting, der kan forbedres.

Det er desuden godt at se, at der er et marked for flere introduktionsbøger til R på dansk. Det kommer kun de studerende til gavn, at der er flere bøger på markedet, som alle har det formål at give den bedst mulige introduktion til et programmeringssprog, der ikke nødvendigvis er let at komme i gang med (især ikke for samfundsvidenskabelige studerende). Introduktion til R afviger eksempelvis fra en bog som R i praksis, og det passer mig fortræffeligt, at de to bøger har forskellige tilgange til, hvordan man kan introducere R til studerende.

Jeg har som sagt flere idéer til, hvilke nye kapitler, der kan komme med i en 3. udgave. Øverst på listen står et kapitel om tekstbearbejdning, da det trods alt er noget, der kun bliver mere aktuelt fremover (især når man har interesse i også at bruge R i forbindelse med LLMs). Det vil også kunne gøres inden for tidyverse, hvor de vigtigste funktioner fra pakker som {stringr} og {forcats} kan blive introduceret. Men det hele afhænger selvsagt af, hvad der er størst interesse for blandt de undervisere, der aktivt bruger bogen i deres undervisning.

Det korte af det lange er, at der kommer en ny udgave af Introduktion til R, men du skal desværre væbne dig med lidt tålmodighed. Hvis du har forslag eller kommentarer til tidligere udgaver af bogen, skal du dog som altid være mere end velkommen til at sende en mail til erikgahner@gmail.com. På forhånd tak!