Readline
Een andere functie om via het keyboard input op te vangen is readline:
readline(prompt = "")
Als prompt kunt u een vraag aan de gebruiker invullen, zoals "Geef steeds 1 getal na elke :" in het scan voorbeeld.
y <- readline(prompt = "Geef input: ")
In tegenstelling tot scan die numerieke input oplevert, maakt readline variabelen van het type karakter. Daar kan dus pas mee gerekend worden nadat ze zijn omgezet tot het numerieke type.
Dat omzetten doe je met de functie as.numeric .
y <- readline(prompt = "Geef input: ")
Geef input: hallo
> y
[1] "hallo"
> inp <- as.numeric(y)
Warning message:
NAs introduced by coercion
Als we, zoals in bovenstaand voorbeeld, karakter-input proberen om te zetten in getallen dan krijgen we een waarschuwing, en het resultaat van de omzetting is een NA [NA betekent: Not Available, en is dus de indicatie van een ontbrekende waarde (missing value)]. Aan de variabele inp is dus de 'waarde' NA toegekend. We kunnen dat als volgt controleren:
> is.na(inp)
[1] TRUE
Als we een getal invoeren als antwoord op de prompt, en die input omzetten met behulp van as.numeric, gaat alles gewoon goed.
> z <- readline(prompt = "Geef input: ")
Geef input: 34
> z
[1] "34"
> as.numeric(z)
[1] 34
Alles even samenvatten in een voorbeeld:
totaal <- function() {
# totaal vraagt om getal input, en rekent over de gegeven getallen de som uit
som <- 0 # we geven de som alvast een waarde
repeat{
input <- readline("Geef 1 getal: ") # lees 1 getal in
x <- as.numeric(input) # zet input om in getallen ipv karakter-input
if(is.na(x)){ # als x == NA, dan is input een letter of woord, en geen getal
print("input is geen getal...")
return(som) # stop, en geef som als output
}
if(x==0) {return(som)} # stop met lus als input gelijk is aan nul
som <- som + x
cat("De som is nu gelijk aan ",som,"\n")
}
}