Κάνοντας κάτι χρήσιμο... Αριθμομηχανή.

Σχετικά έγγραφα
Σύντομη εισαγωγή στον τρόπο χρήσης του R

Χρονικές σειρές 1 ο μάθημα: Εισαγωγή στη MATLAB

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΑΘΕΡΕΣ ΜΕΤΑΒΛΗΤΕΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

Σημαντικές δυνατότητες των σύγχρονων υπολογιστικών μηχανών: Αξιόπιστη καταγραφή πολύ μεγάλου όγκου δεδομένων

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Πρώτη επαφή με το μαθηματικό πακέτο Mathematica

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Γ ΓΥΜΝΑΣΙΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΤΗ ΓΛΩΣΣΑ MicroWorlds Pro

Ρητή μετατροπή αριθμητικής τιμής σε άλλο τύπο. Τι θα τυπωθεί στον παρακάτω κώδικα;

Λογικός τύπος Τελεστές σύγκρισης Λογικοί τελεστές Εντολές επιλογής Εμβέλεια Μαθηματικές συναρτήσεις Μιγαδικός τύπος ΔΕΥΤΕΡΗ ΔΙΑΛΕΞΗ

Πρόβλημα 29 / σελίδα 28

Εισαγωγή στο Πρόγραμμα Maxima

Διαδικασιακός Προγραμματισμός

Εισαγωγή στο MATLAB. Κολοβού Αθανασία, ΕΔΙΠ,

ΥΠΟΛΟΓΙΣΤΕΣ Ι. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΠΡΑΞΕΙΣ. Παράδειγμα #1. Πράξεις μεταξύ ακεραίων αριθμών

SPSS Statistical Package for the Social Sciences

4 ο ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ ΓΕΝΙΚΟΣ ΣΚΟΠΟΣ :

Τυπικές χρήσεις της Matlab

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τύποι δεδομένων ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΠΡΑΞΕΙΣ ΜΕΤΑΒΛΗΤΕΣ. Ακέραιοι αριθμοί (int) Πράξεις μεταξύ ακεραίων αριθμών

Μεταβλητές τύπου χαρακτήρα

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL

Βασικές Αρχές Προγραμματισμού

8 FORTRAN 77/90/95/2003

Εισαγωγή στην Αριθμητική Ανάλυση

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

ΣΥΝΑΡΤΗΣΕΙΣ. Η σύνταξη μιας συνάρτησης σ ένα κελί έχει την γενική μορφή: =όνομα_συνάρτησης(όρισμα1; όρισμα2;.)

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

Προγραμματιστικό Περιβάλλον

ΜΑΗΣ ΕΞΕΤΑΣΤΙΚΟ ΔΟΚΙΜΙΟ

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Επεξεργασία πινάκων

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Τύποι δεδομένων, μεταβλητές, πράξεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Θεωρητικές Ασκήσεις. ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. 1 ο Μέρος

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

ΠΕΡΙΕΧΟΜΕΝΑ. Εντολές επιλογής Εντολές επανάληψης

Υπολογιστές Ι. Άδειες Χρήσης. Τύποι δεδομένων. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ. Δρ. Π. Νικολαΐδου

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Παρουσίαση Libreoffice. Βασίλειος Καραβασίλης Μονάδα Αριστείας ΕΛΛΑΚ ΕΤΕΠΗ 27/04/2015

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

Περιεχόμενα. Κεφάλαιο 1 Γνωριμία με το Excel... 9

επιµέλεια Θοδωρής Πιερράτος

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C

1 η Εργαστηριακή Άσκηση MATLAB Εισαγωγή

3 ο Εργαστήριο Μεταβλητές, Τελεστές

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

1. Εισαγωγή στο Sage.

Θέματα Προγραμματισμού Διαδικτύου ~ PHP ~

Σημειωματάαριο Δευτέρας 16 Οκτ. 2017

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β.

Καθορισμός μεταβλητών και εισαγωγή δεδομένων

Γνωρίστε το Excel 2007

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

Εισαγωγή στον Προγ/μό Υπολογιστών

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Σου προτείνω να τυπώσεις τις επόμενες τέσσερις σελίδες σε ένα φύλο διπλής όψης και να τις έχεις μαζί σου για εύκολη αναφορά.

Εναλλακτικές εντολές για ανάγνωση/εγγραφή

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

Εισαγωγή στον Προγραμματισμό

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Εισαγωγή στο GNU Octave/MATLAB

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ )

Ενότητα 5: ΜΕΤΑΒΛΗΤΕΣ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ. Δρ. Π. Νικολαΐδου

Εισαγωγή στον Προγραμματισμό

1. Τα τμήματα της επιφάνειας εργασίας των Windows

Εντολές της LOGO (MicroWorlds Pro)

Kεφάλαιο 11 Λίστες και Ανάλυση Δεδομένων Kεφάλαιο 12 Εργαλεία ανάλυσης πιθανοτήτων Kεφάλαιο 13 Ανάλυση δεδομένων...

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

Περιεχόμενα. Κεφάλαιο 1 Γνωριμία με το Excel...9

Πώς μπορούμε να δημιουργούμε γεωμετρικά σχέδια με τη Logo;

Αλγόριθμοι Αναπαράσταση αλγορίθμων Η αναπαράσταση των αλγορίθμων μπορεί να πραγματοποιηθεί με:

ΣΗΜΕΙΩΣΕΙΣ. στη γλώσσα προγραμματισμού. Γκέτσιος Βασίλειος

Άσκηση 1. Ποια από τα κάτω αλφαριθμητικά είναι αποδεκτά ως ονόματα μεταβλητών σε έναν αλγόριθμο i. Τιμή

Στοιχειώδης προγραμματισμός σε C++

Εισαγωγή στον Προγραμματισμό

Χρονικές σειρές 3 o μάθημα: Εισαγωγή στη MATLAB

Εισαγωγή στον προγραμματισμό. Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 2

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

Αριθμητική Ανάλυση και Εφαρμογές

Ο Προγραμματισμός στην Πράξη

Ανάπτυξη εφαρμογών/ Βασικές γνώσεις/ πρώτο θέμα ΕΡΩΤΗΣΕΙΣ ΣΥΝΤΟΜΗΣ ΑΠΑΝΤΗΣΗΣ

Περιληπτικά, τα βήματα που ακολουθούμε γενικά είναι τα εξής:

Transcript:

Αρχίζουμε το R γράφοντας απλά R ή, αν είμαστε στα Windows, κάνοντας κλικ στο σχετικό εικονίδιο με το γράμμα R. Αυτό μας πηγαίνει στη γραμμή εντολών όπου βλέπουμε κάτι σαν το ακόλουθο: R version 2.9.2 (2009-08-24) Copyright (C) 2009 The R Foundation for Statistical Computing ISBN 3-900051-07-0 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. Το μήνυμα καλωσορίσματος μας δίνει και χρήσιμες οδηγίες όπως τι να κάνουμε για να πάρουμε βοήθεια ή να φύγουμε από το R. Π.χ. για να φύγουμε μας λέει να γράψουμε q( ). Παρατηρούμε τη χρήση των παρενθέσεων που θυμίζει τη σύνταξη της γλώσσας C. Για βοήθεια γράφουμε help( ) κλπ. Αν δεν είναι πρώτη φορά που ανοίγουμε το R, τότε θα ψάξει για προηγούμενη δουλειά μας και θα τη φορτώσει δίνοντας μας και ένα σχετικό ενημερωτικό μήνυμα. Όταν φεύγουμε από το πρόγραμμα, θα μας ρωτήσει αν θέλουμε να σώσουμε τη δουλειά που έχουμε να κάνει για να μπορούμε να τη συνεχίσουμε την επόμενη φορά. Για να δώσουμε εντολές, τις γράφουμε στην προτροπή (σύμβολο ) και πατάμε ENTER. Κάνοντας κάτι χρήσιμο... Αριθμομηχανή. Το πιο απλό είναι να το χρησιμοποιήσουμε ως αριθμομηχανή για να κάνουμε πράξεις (φυσικά, μπορούμε να κάνουμε και πολύ περισσότερα). Για να το κάνουμε αυτό, χρησιμοποιούμε, εκτός από τα αριθμητικά ψηφία, τα εξής σύμβολα: +, -, *, /, ^ (για ύψωση σε δύναμη), ενώ επίσης υπάρχουν και ενσωματωμένες συναρτήσεις όπως οι sqrt, exp, log (φυσικός, όχι δεκαδικός, λογάριθμος), sin, cos. Επίσης, υπάρχει η ενσωματωμένη σταθερά pi, δηλαδή ο αριθμός π. Η βάση των λογαρίθμων e δεν είναι ενσωματωμένη αλλά μπορούμε να την πάρουμε πολύ εύκολα ως exp(1). Για να κάνουμε πράξεις, γράφουμε την παράσταση που θέλουμε και πατάμε ENTER. Μπροστά από το αποτέλεσμα θα δούμε να γράφεται αυτό: [1]. Το νόημά του θα το εξηγήσουμε παρακάτω. 2+2 [1] 4 2*4 [1] 8 2^3 [1] 8 sqrt(2) [1] 1.414214 1.414214^2 [1] 2.000001 exp(1) [1] 2.718282 pi [1] 3.141593 exp(2)

[1] 7.389056 exp(1.5) [1] 4.481689 sin(pi) [1] 1.224606e-16 Παρατηρούμε ότι το αποτέλεσμα του sin(pi) δεν είναι ακριβώς μηδέν αλλά ένας πολύ μικρός αριθμός. Αυτό συμβαίνει γενικά με τους υπολογιστές και τις γλώσσες προγραμματισμού λόγω της πεπερασμένης ακρίβειας των πράξεων και της αναπαράστασης των αριθμών. Υπάρχουν και συναρτήσεις που παίρνουν επιπλέον ορίσματα για να αλλάξουν την προκαθορισμένη συμπεριφορά τους, π.χ. log(10,10) [1] 1 log(10, base=10) [1] 1 για να πάρουμε δεκαδικούς αντί για φυσικούς λογαρίθμους. Αν δε γράψουμε σωστά τις συναρτήσεις, το πρόγραμμα θα εμφανίσει κατατοπιστικά μηνύματα λάθους. Περισσότερα χρήσιμα πράγματα. Μεταβλητές. Προφανώς η χρήση του R ως αριθμομηχανή δε μας λέει πολλά. Περισσότερη λειτουργικότητα του δίνει η δυνατότητα να ορίσουμε μεταβλητές και να τους αποδώσουμε τιμές. Ο ορισμός μιας μεταβλητής και η απόδοση τιμής σε αυτή γίνονται συγχρόνως σε ένα βήμα: = 2 +3 [1] 5 Εδώ, ορίσαμε τη μεταβλητή x στην οποία δώσαμε την τιμή 2. Έτσι, η παράσταση x+3 βρήκαμε ότι έχει τιμή 5. e = exp(1) e^2 [1] 7.389056 Εδώ, ορίσαμε το e ως βάση των φυσικών λογάριθμων και τυπώσαμε το τετράγωνό του. Το σύμβολο της ισότητας που χρησιμοποιήσαμε για τον ορισμό μιας μεταβλητής, μπορεί να χρησιμεύσει και για πιο σύνθετες εντολές ανάθεσης, όπως και σε άλλες γλώσσες προγραμματισμού. Π.χ. γράφοντας x = 2*x+1 εννοούμε ότι το x παίρνει την τιμή της παράστασης στο δεξιό σκέλος. Επειδή μερικοί βρίσκουν ότι αυτό προκαλεί σύγχυση, υπάρχει και το σύμβολο <- που κάνει το ίδιο (αναθέτει την τιμή του δεξιού στο αριστερό μέλος), αλλά και το σύμβολο - (αναθέτει την τιμή του αριστερού στο δεξί μέλος). Τέλος, υπάρχει και το σύμβολο <<- που χρησιμοποιείται στον προγραμματισμό με R. Παραδείγματα: τυπώνουμε την τιμή του x που είχαμε αποδώσει νωρίτερα (2) [1] 2 y = x ορίζουμε τη μεταβλητή y και της αποδίδουμε την τιμή της x = 2*x+1 αποδίδουμε στη x την τιμή της παράστασης 2*x+1 (για x=2) τυπώνουμε τη νέα τιμή (5) [1] 5 y <- 2*x-1 αποδίδουμε στο y την τιμή της παράστασης 2*x-1 (για x=5) y τυπώνουμε τη νέα τιμή του y (9) [1] 9 (y+1)/2 - y αποδίδουμε, με το -, στο y την τιμή του (y+1)/2 (για y=9) y τυπώνουμε τη νέα τιμή του y (5) [1] 5

Τα ονόματα των μεταβλητών μπορούν να περιέχουν γράμματα, αριθμητικά ψηφία, τελεία και χαρακτήρα υπογράμμισης. Μπορούν να αρχίζουν από γράμμα ή τελεία. Συνηθίζονται, χωρίς να είναι υποχρεωτικό, οι εξής συμβάσεις: n για αριθμό δεδομένων (παρατηρήσεων) x, y για άνυσμα (πίνακα) δεδομένων (βλ. συνέχεια) i, j για ακέραιους και αριθμοδείκτες μεταβλητές που αρχίζουν με τελεία χρησιμοποιούνται στον προγραμματισμό με R Μαζικός χειρισμός δεδομένων από παρατηρήσεις Οι μεταβλητές που περιγράψαμε είναι βαθμωτές, δηλαδή μια μεταβλητή αντιστοιχεί σε μία τιμή. Αν θέλουμε να κάνουμε στατιστική επεξεργασία δεδομένων θα έχουμε πάρα πολλές παρατηρήσεις και δεν είναι πρακτικό να ορίζουμε μία μεταβλητή για κάθε μία. Εδώ έρχεται μια κατασκευή εντελώς ανάλογη με τους πίνακες που ξέρουμε από άλλες γλώσσες προγραμματισμού και, ίσως, πιο ευέλικτη. Θα την ονομάσουμε άνυσμα δεδομένων (data vector). Τα ανύσματα δεδομένων ορίζονται όπως και οι μεταβλητές, δηλαδή τους δίνουμε ένα όνομα και συγχρόνως τους αποδίδουμε τιμές. Η απόδοση τιμών σε ένα άνυσμα δεδομένων γίνεται με τη συνάρτηση c( ). Δε χρειάζεται να ορίσουμε διάσταση (μέγεθος). Θα γίνει αυτόματα. Αρκεί να γράψουμε τις τιμές μας ως ορίσματα της c ( ) χωρισμένες με κόμματα. my_data = c(74, 122, 235, 111, 292, 111, 211, 133, 156, 79) my_data [1] 74 122 235 111 292 111 211 133 156 79 (ορίσαμε το άνυσμα my_data και μετά εμφανίσαμε τις τιμές του) Με τη συνάρτηση c( ) μπορούμε και να συνδυάσουμε δύο ανύσματα δεδομένων σε ένα. = c(74, 122, 235, 111, 292) y = c(111, 211, 133, 156, 79) c(x,y) [1] 74 122 235 111 292 111 211 133 156 79 z = c(x,y) z [1] 74 122 235 111 292 111 211 133 156 79 Τα δεδομένα πρέπει να είναι του ίδιου τύπου. Αν δεν είναι θα μετατραπούν σε ένα, συνήθως αλφαριθμητικό, εμποδίζοντας περαιτέρω αριθμητικές πράξεις. Αλφαριθμητικά δεδομένα ορίζονται με τη βοήθεια απλών ή διπλών εισαγωγικών. simpsons = c("homer", "Marge", "Bart", "Lisa", "Maggie") simpsons [1] "Homer" "Marge" "Bart" "Lisa" "Maggie" Αν θέλουμε, μπορούμε να βάλουμε ονόματα στα στοιχεία ενός ανύσματος δεδομένων, ώστε όταν εμφανίζονται οι τιμές του, να φαίνονται από πάνω τα ονόματα σαν επικεφαλίδες. Αυτό γίνεται με τη συνάρτηση names( ) που χρησιμοποιείται ως εξής: names(simpsons) = c("dad", "mom", "son", "daughter 1", "daughter 2") names(simpsons) [1] "dad" "mom" "son" "daughter 1" "daughter 2" simpsons dad mom son daughter 1 daughter 2 "Homer" "Marge" "Bart" "Lisa" "Maggie" Από τη στιγμή που αποθηκεύουμε τα δεδομένα, προφανώς θέλουμε να τα επεξεργαστούμε. Τα

ανύσματα δεδομένων μπορούν να αποτελέσουν ορίσματα πολύ χρήσιμων συναρτήσεων, όπως φαίνεται στο ακόλουθο sum(my_data) # άθροισμα [1] 1524 length(my_data) # μήκος ανύσματος δεδομένων, δηλαδή αριθμός των στοιχείων του [1] 10 sum(my_data)/length(my_data) [1] 152.4 mean(my_data) # μέση τιμή δίνει το ίδιο με sum( ) / length( ) [1] 152.4 sort(my_data) # ταξινόμηση κατ' αύξουσα σειρά [1] 74 79 111 111 122 133 156 211 235 292 min(my_data) # ελάχιστη αποθηκευμένη τιμή [1] 74 max(my_data) # μέγιστη αποθηκευμένη τιμή [1] 292 range(my_data) # εύρος τιμών, δηλαδή η ελάχιστη και η μέγιστη [1] 74 292 diff(my_data) # διαφορές (δεύτερη-πρώτη, τρίτη δεύτερη κλπ) [1] 48 113-124 181-181 100-78 23-77 cumsum(my_data) # αθροίσματα (πρώτη, πρώτη+δεύτερη, πρώτη+δεύτερη+τρίτη κλπ) [1] 74 196 431 542 834 945 1156 1289 1445 1524 Ένα ακόμη ενδιαφέρον στοιχείο είναι ότι οι πράξεις και συναρτήσεις στο R είναι vectorized, δηλαδή επιδρούν σε κάθε στοιχείο του ανύσματος χωριστά. my_data.1=c(89, 254, 306, 292, 274, 233, 294, 204, 204, 90) my_data + my_data.1 [1] 163 376 541 403 566 344 505 337 360 169 my_data - my_data.1 [1] -15-132 -71-181 18-122 -83-71 -48-11 my_data - mean(my_data) [1] -78.4-30.4 82.6-41.4 139.6-41.4 58.6-19.4 3.6-73.4 Το πιο ενδιαφέρον είναι το τελευταίο όπου ένας αριθμός αφαιρείται από ένα άνυσμα. Αυτό λέγεται ανακύκλωση δεδομένων, δηλαδή τιμές από το ένα άνυσμα επαναλαμβάνονται ώστε το μήκος του να ταιριάξει με το άλλο. Η διασπορά των δεδομένων υπολογίζεται απευθείας με τη συνάρτηση var( ). Εδώ θα υπολογιστεί υλοποιώντας το γνωστό ορισμό του μέσου τετραγώνου για να δείξουμε τη χρήση του vectorization. = c(2, 3, 5, 7, 11) sum((x-mean(x))^2)/(length(x)-1) [1] 12.8 Μπορούμε να το γράψουμε και πιο αναλυτικά, ως εξής: = c(2, 3, 5, 7, 11) mean = mean(x) n=length(x) sum((x-xmean)^2)/(n-1) [1] 12.8 Φυσικά, μπορούμε και να το επαληθεύσουμε: var(x) [1] 12.8 Επειδή, ουσιαστικά οι βαθμωτές μεταβλητές μπορούν να θεωρηθούν ως ανύσματα μεγέθους 1 και

το vectorization επιτρέπει ομοιόμορφο χειρισμό όλων των μεταβλητών και ανυσμάτων δεδομένων, θα αναφερόμαστε στα ανύσματα ως μεταβλητές αν αυτό δεν προκαλεί σύγχυση. Βοήθεια για τις συναρτήσεις μπορούμε να πάρουμε ως εξής: π.χ. για τη συνάρτηση mean, θα γράψουμε help( mean ) ή?mean ή? mean. Επίσης, μπορούμε να δούμε παραδείγματα ως εξής: example( mean ). Ακόμη, αν γράψουμε help.search( mean ) θα βρούμε όλες τις σελίδες της βοήθειας που αναφέρουν κάπου τη συνάρτηση mean, ενώ με apropos( mean ) θα δούμε όλα τα ονόματα συναρτήσεων που περιέχουν τη λέξη mean. Προσοχή! Το παράδειγμα μπορεί να αλλοιώσει τα δεδομένα σας! Π.χ. = c(2, 3, 5, 7, 11) [1] 2 3 5 7 11... (διάφορες πράξεις) example("mean") mean <- c(0:10, 50) meanm <- mean(x) mean c(xm, mean(x, trim = 0.10)) [1] 8.75 5.50 mean mean(usarrests, trim = 0.2) Murder Assault UrbanPop Rape 7.42 167.60 66.20 20.16 [1] 0 1 2 3 4 5 6 7 8 9 10 50 Μερικές ευκολίες... Πάνω βελάκι προηγούμενη εντολή (πολλές φορές, μας γυρίζει ανάλογα πίσω) Κάτω βελάκι μας γυρίζει μπροστά μέχρι την πιο πρόσφατη εντολή Αριστερό/δεξί βελάκι πηγαινοφέρνει τον κέρσορα αναλόγως HOME ή Ctrl-a στην αρχή της τρέχουσας γραμμής END ή Ctrl-e στο τέλος της τρέχουσας γραμμής Αν θέλουμε να διορθώσουμε τα δεδομένα που έχουμε εισάγει σε κάποια μεταβλητή μπορούμε να το κάνουμε με τη συνάρτηση data.entry( ) και θα μας ανοίξει ένα απλό λογιστικό φύλλο. Παρόμοια και με την edit( ) που είναι πιο πρωτόγονη, σε στυλ vi και στην οποία πρέπει να εισάγουμε πάντα την ανάθεση των δεδομένων στη μεταβλητή για να μη χαθούν οι διορθώσεις. Η data.entry χρησιμεύει και στην εισαγωγή δεδομένων: ορίζουμε μια απλή μεταβλητή και με τη data.entry συνεχίζουμε την εισαγωγή δεδομένων. Δομημένα δεδομένα Άλλη μια ευκολία που παρέχει το R είναι η δυνατότητα να εκμεταλλευόμαστε κάθε κανονικότητα ή ιδιαίτερο χαρακτηριστικό των δεδομένων ώστε να τα εισάγουμε και να τα χειριζόμαστε πιο εύκολα. Με τη διπλή τελεία (:) μπορούμε να δίνουμε συνεχόμενους αριθμούς. 1:10 Από 1 ως 10 [1] 1 2 3 4 5 6 7 8 9 10 rev(1:10) Αντιστροφή του προηγουμένου [1] 10 9 8 7 6 5 4 3 2 1 10:1 Από 10 ως 1 [1] 10 9 8 7 6 5 4 3 2 1

Αριθμητικές πρόοδοι μπορούν να οριστούν και εισαχθούν πολύ εύκολα a = 1; h = 4; n = 5 (το ; επιτρέπει να γράφουμε πολλές εντολές στην ίδια σειρά) a + h*(0:n) εμφανίζω την πρόοδο a + hi, i = 0, 1,... n [1] 1 5 9 13 17 21 a + h*(0:(n-1)) εμφανίζω την πρόοδο a + hi, i = 0, 1,... n-1 [1] 1 5 9 13 17 a + h*(0:n-1) Προσοχή! Εμφανίζω την πρόοδο a + h(i-1), i = 0, 1,... n Είναι ισοδύναμο με το a + h*((0:n)-1) [1] -3 1 5 9 13 17 b = a + h*(0:n) Ορίζω το b με στοιχεία τους όρους της προόδου a + hi, i = 0, 1,... n b [1] 1 5 9 13 17 21 b = c(a + h*(0:n)) Ορίζω το b με στοιχεία τους όρους της προόδου a + hi, i = 0, 1,... n b [1] 1 5 9 13 17 21 Το παραπάνω παράδειγμα δείχνει ότι χρειάζεται προσοχή στη χρήση παρενθέσεων για να μην πάρουμε λάθος αποτελέσματα. Όπως και με άλλες γλώσσες προγραμματισμού, είναι καλό να χρησιμοποιούμε καταχρηστικά τις παρενθέσεις για να είμαστε βέβαιοι για τη σειρά των πράξεων. Επαναλαμβανόμενοι αριθμοί. Με τη συνάρτηση rep(v, n) μπορούμε να επαναλάβουμε την τιμή v για n φορές. Το v μπορεί να είναι και πιο σύνθετη ομάδα δεδομένων. rep(1, 10) [1] 1 1 1 1 1 1 1 1 1 1 rep(1:3, 3) [1] 1 2 3 1 2 3 1 2 3 Συνδυάζοντας τα παραπάνω, μπορούμε να χειριστούμε πολύπλοκες ομάδες δεδομένων. Προσπέλαση δεδομένων με αριθμοδείκτες Η χρησιμότητα των παραπάνω γίνεται πιο εμφανής με τους αριθμοδείκτες των μεταβλητών. Όπως και σε άλλες γλώσσες προγραμματισμού, στο R μπορούμε να προσπελάσουμε μια μεμονωμένη τιμή από ένα άνυσμα δεδομένων χρησιμοποιώντας κατάλληλο αριθμοδείκτη. Ο συμβολισμός είναι ίδιος με τη γλώσσα C, αλλά η μέτρηση αρχίζει από το 1 και όχι από το 0: x[1], x[2],... my_data [1] 74 122 235 111 292 111 211 133 156 79 n=length(my_data) n [1] 10 my_data[1] [1] 74 my_data[n] [1] 79 my_data[length(my_data)] [1] 79 Μπορούμε να κάνουμε χρήση των τεχνικών δόμησης δεδομένων που περιγράψαμε, για να πάρουμε πιο πολύπλοκα υποσύνολα από μια μεταβλητή. Π.χ. με τη διπλή τελεία, :, μπορούμε να πάρουμε

τομείς (slices) δεδομένων: my_data[1:4] [1] 74 122 235 111 Μπορούμε να χρησιμοποιήσουμε ακόμη και οποιουσδήποτε δείκτες ομαδικά με τη βοήθεια της c( ). Π.χ. για να προσπελάσουμε ταυτόχρονα το πρώτο, τρίτο και έκτο στοιχείο ενός ανύσματος: my_data[c(1,3,6)] [1] 74 235 111 Κατά σύμβαση, μπορούμε να χρησιμοποιούμε αρνητικούς δείκτες, αν η απόλυτη τιμή τους είναι από 1 μέχρι το μήκος της μεταβλητής, για να εμφανίσουμε όλα τα άλλα στοιχεία εκτός από αυτά στα οποία αναφερόμαστε με την απόλυτη τιμή των δεικτών: my_data[-1] [1] 122 235 111 292 111 211 133 156 79 my_data[-(1:4)] [1] 292 111 211 133 156 79 my_data[-(c(1,3,6))] [1] 122 111 292 211 133 156 79 Τέλος, αν έχουμε δώσει ονόματα στα στοιχεία μιας μεταβλητής με τη βοήθεια της names( ), μπορούμε να τα χρησιμοποιήσουμε αντί για δείκτες: =1:3 names(x)=c("one", "two", "three") ["two"] two 2 Φυσικά, μπορούμε να χρησιμοποιήσουμε δείκτες για να αποδώσουμε τιμές, διορθώνοντας έτσι και τις προϋπάρχουσες, σε συγκεκριμένα στοιχεία των μεταβλητών. Αν ο δείκτης που χρησιμοποιούμε υπερβαίνει το μήκος της μεταβλητής, τότε αυτή αυξάνεται αναλόγως (προστίθενται στοιχεία). Μπορούμε να συνδυάσουμε τις τεχνικές που περιγράψαμε πιο πάνω για να αποδώσουμε τιμές σε υποσύνολα των δεδομένων που μας ενδιαφέρουν. =1:3 names(x)=c("one", "two", "three") ["two"] two 2 [1] = 3 one two three 3 2 3 [4]=4 one two three 3 2 3 4 [6]=5 one two three Εδώ, επεκτείναμε το άνυσμα κατά δύο θέσεις. 3 2 3 4 NA 5 Η προτελευταία είναι μη διαθέσιμη (ΝΑ) αφού δεν τις δώσαμε τιμή [5:6]=5 one two three 3 2 3 4 5 5 [-2] = 0 one two three 0 2 0 0 0 0

Μπορούμε και να επεκτείνουμε ένα σύνολο δεδομένων, αποδίδοντάς του τιμές σε ένα κατάλληλο άνυσμα δεικτών. = 1:4 [1] 1 2 3 4 [5:8] = 5 [1] 1 2 3 4 5 5 5 5 y = c(3, 5, 8) y [1] 3 5 8 [9:11] = y [1] 1 2 3 4 5 5 5 5 3 5 8 Διάλογος με το R. Λογικές τιμές Εκτός από αριθμητικές και αλφαριθμητικές τιμές, υπάρχουν και οι λογικές τιμές. Αυτές λαμβάνονται όταν διατυπώνουμε μια ερώτηση υπό μορφή συνθήκης σχετικά με τα δεδομένα μας και το R μας απαντά με τις τιμές TRUE, FALSE για καθένα από αυτά. my_data 100 [1] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE Τότε, θα θέλαμε να βρούμε ποια είναι αυτά τα δεδομένα για τα οποία ισχύει η συνθήκη που θέσαμε. Αυτό μπορεί να σημαίνει ότι θέλουμε να βρούμε είτε τις τιμές τους, είτε τα στοιχεία της μεταβλητής που την ικανοποιούντ (δηλαδή το δείκτη τους). Το πρώτο γίνεται βάζοντας τη συνθήκη στη θέση του δείκτη μέσα στις αγκύλες, [], ενώ το δεύτερο με τη συνάρτηση which ( ). my_data < 100 [1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE my_data[my_data < 100] [1] 74 79 which(my_data < 100) [1] 1 10 my_data[which(my_data < 100)] [1] 74 79 my_data[c(1,10)] [1] 74 79 Για να διατυπώνουμε λογικές συνθήκες έχουμε στη διάθεσή μας τα σύμβολα, =, <, <=, ==,!=, &, &&, και. Τα & και είναι vectorized, δηλαδή δίνουν αποτέλεσμα σύγκρισης αντίστοιχων τιμών από δύο μεταβλητές, ενώ τα && και εκτιμώνται από αριστερά προς τα δεξιά μέχρι να προσδιοριστεί ένα TRUE ή FALSE, δηλαδή επιστρέφουν μόνο μια λογική τιμή. Παράδειγμα =1:5 <5 [1] TRUE TRUE TRUE TRUE FALSE 1 [1] FALSE TRUE TRUE TRUE TRUE 1 & x<5 [1] FALSE TRUE TRUE TRUE FALSE 1 && x<5 [1] FALSE 1 x<5 [1] TRUE TRUE TRUE TRUE TRUE 1 x<5 [1] TRUE

==3 [1] FALSE FALSE TRUE FALSE FALSE!=3 [1] TRUE TRUE FALSE TRUE TRUE! x==3 [1] TRUE TRUE FALSE TRUE TRUE == c(2,4) [1] FALSE FALSE FALSE TRUE FALSE Warning message: In x == c(2, 4) : longer object length is not a multiple of shorter object length %in% c(2,4) [1] FALSE TRUE FALSE TRUE FALSE Για σύγκριση ανύσματος με εύρος τιμών είναι προτιμώτερος ο τελεστής %in%. Σημείωση: για αριθμητικές συγκρίσεις, οι τελεστές ==,!= κλπ δεν είναι κατάλληλοι και αντί γι' αυτούς χρησιμοποιούμε τις συναρτήσεις identical και all.equal. Όταν λείπουν τιμές (ΝΑ) από τα δεδομένα μας χρησιμοποιούμε τη συνάρτηση is.na για να τις εντοπίζουμε, π.χ. x[!is.na(x)] Περιβάλλον εργασίας Αν έχουμε ορίσει πολλές μεταβλητές, μπορούμε να τις θυμηθούμε με τη συνάρτηση ls( ) ή την objects( ) ls() [1] "a" "b" "e" "h" "my_data" "my_data.1" [7] "n" "simpsons" "w" "x" "xm" "xmean" [13] "y" "z" objects() [1] "a" "b" "e" "h" "my_data" "my_data.1" [7] "n" "simpsons" "w" "x" "xm" "xmean" [13] "y" "z" Με την ευκαιρία, παρατηρούμε ότι στην αρχή κάθε γραμμής υπάρχουν οι ενδείξεις [1], [7], [13]. Αυτές χρησιμεύουν στο να μας δείξουν από ποιο στοιχείο του ανύσματος των απεικονιζόμενων δεδομένων αρχίζει η σειρά. Η πρώτη έχει τα στοιχεία 1 ως 6, η δεύτερη τα 7 ως 12 και η τρίτη από το 13 και μετά. Αυτό χρησιμεύει στη διευκόλυνσή μας στο να εντοπίζουμε κάτι που ψάχνουμε. Μπορούμε να χρησιμοποιήσουμε και τη browseenv( ) που θα ανοίξει browser για να μας δείξει την παραπάνω πληροφορία. Μπορούμε να βρούμε συγκεκριμένα αντικείμενα που έχουμε ορίσει με τη λέξη pattern. ls(pattern="data") [1] "my_data" "my_data.1" Για να καταργήσουμε αντικείμενα που δε μας ενδιαφέρουν πια, χρησιμοποιούμε τη συνάρτηση rm( ) ή remove( ). ls() [1] "a" "b" "e" "h" "my_data" "my_data.1" [7] "n" "simpsons" "w" "x" "xm" "xmean" [13] "y" "z" rm(x) rm (xm, xmean) rm(a,b,y,w) ls() [1] "e" "h" "my_data" "my_data.1" "n" "simpsons" [7] "z"

Εξωτερικές πηγές δεδομένων Συχνά έχουμε στοιχεία σε εξωτερικά αρχεία και θέλουμε να τα επεξεργαστούμε. Είναι προτιμώτερο να τα διαβάζουμε απευθείας από εκεί παρά να τα αντιγράφουμε με το χέρι. Παραδείγματα: Αν έχουμε το αρχείο data1.txt με τα εξής δεδομένα 74 122 235 111 292 111 211 133 156 79 και στην παραπάνω μορφή, τότε μπορούμε να το διαβάσουμε με τη συνάρτηση scan data1 = scan(file="data1.txt") Read 10 items data1 [1] 74 122 235 111 292 111 211 133 156 79 Αν έχουμε ένα αρχείο data2.txt με δεδομένα σε στήλες μπορούμε να το διαβάσουμε ως εξής: read.table("data2.txt",header=true) x y 1 1 2.05 2 2 3.95 3 3 5.89 4 4 7.99 5 5 10.01 6 6 12.11 7 7 14.07 8 8 15.94 9 9 18.04 10 10 20.06 data2=read.table("data2.txt",header=true) data2 x y 1 1 2.05 2 2 3.95 3 3 5.89 4 4 7.99 5 5 10.01 6 6 12.11 7 7 14.07 8 8 15.94 9 9 18.04 10 10 20.06 Αν το αρχείο είναι τύπου CSV θα χρησιμοποιήσουμε τη συνάρτηση read.csv( ) Το όνομα του αρχείου μπορούμε να το δώσουμε και διαδραστικά με τη συνάρτηση file.choose( ): read.table(file=file.choose( )) Μπορούμε επίσης να συγκεντρώσουμε εντολές του R σε εξωτερικά αρχεία και να τις διαβάσουμε με τη συνάρτηση source( ). Το αρχείο commands περιέχει x = 1:10 y = x^2 z = log(x, 10) Τότε, στο R, εκτελούμε: source("commands") ; y; z [1] 1 2 3 4 5 6 7 8 9 10 [1] 1 4 9 16 25 36 49 64 81 100 [1] 0.0000000 0.3010300 0.4771213 0.6020600 0.6989700 0.7781513 0.8450980 [8] 0.9030900 0.9542425 1.0000000 Για να εντοπίσουμε ένα αρχείο, μπορούμε να αναφερόμαστε και στη διαδρομή του, με τους κανόνες του λειτουργικού συστήματος. Ο κατάλογος εργασίας βρίσκεται με τη συνάρτηση getwd( ) και επανακαθορίζεται με τη setwd( ). Αρχεία μπορούν να βρεθούν και να διαβαστούν ακόμη και στο διαδίκτυο αν δοθεί η διεύθυνσή τους.