Inleiding Programmeren + R

Scan

» Start

Scan



R kent een aantal manieren om input op te vangen via het toetsenbord. In de eerste plaats met behulp van de functie scan. Een van de argumenten die scan daarbij gebruikt is n; het aantal waarden dat ingelezen gaat worden. 

Bijvoorbeeld:

    

    y <- scan(n=1)

    

leest 1 numerieke waarde in en kent die waarde vervolgens toe aan de variabele y.


En zo doe je er 30:


    > v<-scan(n=30)

    1: 3 2 4 5 3 4 5 6 7 8 6 5 # ik doe Enter

    13: 2 3 4 5 67 5 4 3 # we gaan verder vanaf getal 13

    21: 4 5 6 7 5 5      # en verder vanaf 20

    27: 4 5 56

    30: 6                # en de laatste...

    Read 30 items

    

    > v

    [1]  3  2  4  5  3  4  5  6  7  8  6  5  2  3  4  5 67  5  4  3  4  5  6  7

    [25]  5  5  4  5 56  6


Check: 

Wat gebeurt in als je in het bovenstaande voorbeeld meer dan 1 waarde intypt?

Wat gebeurt in als je in het bovenstaande voorbeeld een woord intypt, bijv 'hallo' ?


Als je scan geen argument geeft dan blijft deze functie getallen inlezen, totdat je met een lege regel eindigt:


    > x<-scan()

    1: 23

    2: 45

    3: 34

    4: 67

    5: 89

    6: 546

    7: 

    Read 6 items

    > x

    [1]  23  45  34  67  89 546


Die serie getallen type je zelf in, maar je kunt ze bijvoorbeeld ook met een copy [Ctrl-C] uit een kolom van een Excel spreadsheet hebben gehaald, waarna je met de cursor achter de 1: gaat staan en paste [Ctrl-V] doet.


Als je in een zelf geschreven programma de gebruiker om input wil vragen (ipv die input als parameter bij de aanroep mee te geven), zou je daarvoor de volgende functie kunnen gebruiken:

prmpt <- function(input) {

# input geeft aan hoeveel getallen moeten worden ingelezen

cat("Geef steeds 1 getal na elke : ","\n")

out <- scan(n=input)

out

}


Kopieer en plak de bovenstaande regels in een tekstfile (Notepad, of Textwrangler), en bewaar die file met naam prompt.r in de working directory van R.


Wat in deze functie nog ontbreekt is een goede fout afhandeling, bijvoorbeeld als de gebruiker een woord ipv een getal intypt.