Inleiding Programmeren + R

Readline

» Start

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")

        }

    }