R: Känns så förvirrande, vart ska jag ens börja?
Vid en blodtransfusion är det viktigt att hålla koll på givarens och mottagarens blodgrupp. Blodgrupperna delas in i AB0 och Rh systemet.
För AB0 systemet gäller att en person kan antingen vara typ A, B, AB eller 0. Följande gäller:
• En person med typ AB kan ta emot blod från alla typer
• En person med typ A kan bara ta emot från någon med typ A eller 0
• En person med typ B kan bara ta emot från någon med typ B eller 0
• En person med typ 0 kan bara ta emot från en person med typ 0.
För Rh systemet gäller att en person kan antingen vara positiv (+) eller negativ (-).
Följande gäller:
• En person som är positiv kan ta emot blod från båda typerna.
• En person som är negativ kan bara ta emot blod från någon som är negativ.
Er uppgift är att skapa en funktion blood_match() med argumentet patients som talar om ifall en
person kan ta emot en annan persons blod baserat på deras blodgrupp. Ni får givet en lista patients
som ska innehålla två listor som heter giver och reciever, en för varje person. Varje person har två
variabler, som heter AB0 och rh som båda innehåller en textsträng, där textsträngarna ska vara A,B,AB
eller 0 för AB0 och + eller - för rh.
Funktionen ska skriva ut textraden They are a match om transfusionen är möjlig. Om det inte är
möjligt ska texten They are not a match skrivas ut tillsammans med Incompatible AB0, Incompatible
rh eller Incompatible AB0 and rh beroende på vad som inte matchade. Funktionen ska alltså använda
print() för att ge denna output, ni ska inte använda return() i denna funktion.
Om det är så att patients inte är en lista ska funktionen stoppas och returnera felmeddelandet Not
a list
Om det är så att någon av värdena i AB0 och rh inte är korrekta (t.ex. AB0 skulle vara C) ska
funktionen stoppas och returnera felmeddelandet Wrong bloodtype
Det beror helt på vad du har för kunskaper inom programmering samt R.
Börja med att fundera ut hur komplext du vill att systemet ska vara.
Vill du ha ett litet system med ett register av olika människor exempelvis? Då kan det bara lämpligt att mappa deras blodtyp.
Det finns så pass många olika varianter av lösningar att du får fundera ut en rough idé om hur du vill att det ska fungera.
Annars kan man göra en simpel funktion som tar emot två blodtyper och kollar om det är kompatibelt.
börja med att göra en tabell så får du överblick, sen implementera tabellen i din funktion.
Receiver | Possible giver | |||
AB+ | A+- | B+- | AB+- | O+- |
AB- | A- | B- | AB- | O- |
A+ | A+- | O+- | ||
A- | A- | O- | ||
B+ | B+- | O+- | ||
B- |
B- | O- | ||
O+ | O+- | |||
O- | O- |
Såhär ska det se ut men förstår inte hur jag ska göra listorna till att börja med
test_patientsA = list(giver = list(AB0 = "0", rh = "-" ),
reciever = list(AB0 = "AB", rh = "+"))
blood_match(test_patientsA)
[1] "They are a match"
test_patientsB = list(giver = list(AB0 = "AB", rh = "+" ),
reciever = list(AB0 = "0", rh = "+"))
blood_match(test_patientsB)
[1] "They are not a match, Incompatible AB0"
test_patientsC = list(giver = list(AB0 = "0", rh = "+" ),
reciever = list(AB0 = "B", rh = "-"))
blood_match(test_patientsC)
[1] "They are not a match, Incompatible rh"
test_patientsD = list(giver = list(AB0 = "A", rh = "H" ),
reciever = list(AB0 = "AB", rh = "+"))
blood_match(test_patientsD)
Error in blood_match(test_patientsD): Wrong bloodtype
# Om ingen lista
blood_match("hej!")
Error in blood_match("hej!"): Not a list
Och jag förstår att det ska användas if-else funktionen