Skip to content

Instantly share code, notes, and snippets.

@kantale
Last active September 27, 2021 15:14
Show Gist options
  • Save kantale/6ae39d3b9b48eca5b2e2afc96f633af3 to your computer and use it in GitHub Desktop.
Save kantale/6ae39d3b9b48eca5b2e2afc96f633af3 to your computer and use it in GitHub Desktop.
ΒΙΟΛ-109 . Χρήσεις του Η/Υ και Βιολογικές Βάσεις Δεδομένων, Θέματα εξέτασης Σεπτέμβριος 2021

if.. else.. και συναρτήσεις

Άσκηση 1

Γράψτε μία συνάρτηση η οποία θα παίρνει σαν παράμετρο 2 αριθμούς. Η συνάρτηση θα επιστρέφει:

  • -1 αν και οι δύο αριθμοί είναι μικρότεροι από το 0,
  • 0 αν τουλάχιστον ένας αριθμός είναι ίσος με το 0,
  • 1 αν κοι οι δύο αριθμοί είναι μεγαλύτεροι από το 0.

Άσκηση 2

Ένα κατάστημα πουλάει μπάλες με την εξής πολιτική:

  • Οι πρώτες 10 μπάλες που αγοράζεις κοστίζουν 2 ευρώ ανά μπάλα.
  • Από την 11η μέχρι και την 20η κοστίζουν 1 ευρώ η μπάλα.
  • Από την 21η και μετά κοστίζουν 0.5 ευρώ η μπάλα.

Γράψτε μία συνάρτηση η οποία θα παίρνει σαν παράμετρο 1 αριθμό. Η συνάρτηση θα επιστρέφει τη τιμή που κάνουν τόσες μπάλες όσες αυτός ο αριθμός. Για παράδειγμα:

f(5)  --> επιστρέφει: 10 (2*5)
f(15) --> επιστρέφει: 25 (10*2 + 5*1)
f(25) --> επιστρέφει  32.5 (10*2 + 10*1 + 5*0.5)

Άσκηση 3

Γράψτε μία συνάρτηση η οποία θα παίρνει σαν παράμετρο έναν αριθμό ο οποιος θα αναπαριστάνει δευτερόλεπτα. Ο αριθμός μπορεί να είναι και μεγαλύτερος από 60 (π.χ 10000). Η συνάρτηση θα μετατρέπει τον αριθμό αυτό στην αντίστοιχη αναπαράσταση σε ώρες, λεπτά και δευτερόλεπτα. Η συνάρτηση θα πρέπει να επιστρέφει ένα διάνυσμα με τρεις ακέραιες τιμές. Η πρώτη θα είναι οι ώρες (έναν αριθμός >=0) η δεύτερη τα λεπτά (ένας αριθμός από το 0 μέχρι το 59) και η τρίτη τα δευτερόλεπτα (ένας αριθμός από το 0 μέχρι το 59).

Για παράδειγμα θα πρέπει:

f(56751) --> Επιστρέφει το διάνυσμα: c(15, 45, 51) 

Άσκηση 4

Γράψτε μία συνάρτηση η οποία θα παίρνει σαν παράμετρο έναν ακέραιο αριθμό. Η συνάρτηση θα επιστρέφει έναν αριθμό από το 0 μέχρι το 9 ο οποίος θα είναι πόσες δεκάδες έχει ο αριθμός της παραμέτρου. Για παράδειγμα:

f(123) --> Επιστρέφει 2
f(4) --> Επιστρέφει 0
f(4567) --> Επιστρέφει 6

Άσκηση 5

Γράξτε μία συνάρτηση η οποία θα παίρνει σαν παράμετρο 2 αριθμούς x1,x2. Η συνάρτηση θα επιστρέφει:

  • Aν τo άθροισμά τους είναι 0, επιστρέφει: 'ADYNATO'
  • Αν το άθροισμα τους δεν είναι 0 επιστρέφει τη τιμή της παράστασης:

img

Άσκηση 6

Φτιάξτε μία συνάρτηση η οποία θα παίρνει σαν παράμετρο ένα αλφαριθμητικό. Η συνάρτηση θα επιστρέφει TRUE αν η ακολουθία ΔΕΝ περιέχει κάποιον αριθμό, διαφορετικά θα επιστρέφει FALSE. Για παράδειγμα:

f('mitsos') --> επιστρέφει TRUE
f('mi4tsos') --> επιστρέφει  FALSE

Άσκηση 7

Γράψτε μία συνάρτηση η οποία θα παίρνει σαν παράμετρο 2 αριθμούς h,m. Η συνάρτηση θα επιστρέφει:

  • TRUE αν το h είναι από το 0 μέχρι και το 23 και το m είναι από το 0 μέχρι και το 59.
  • FALSE αν δεν ισχύει το παραπάνω.

Για παράδειγμα:

f(5,3) --> True
f(24,5) --> False
f(10, 61) --> False
f(0, 0) --> True

Άσκηση 8

Γράψτε μία συνάρτηση η οποία θα παίρνει σαν παράμετρο έναν αριθμό από το 1 μέχρι το 10000 η οποίος αναπαριστάνει μία χρονιά. Η συνάρτηση θα επιστρέφει ένα string το οποίο θα αναπαριστάνει σε ποιον αιώνα βρίσκεται αυτή η χρονιά. Η συνάρτηση πρέπει να επιστρέφει ένα string της μορφής "Χ century", όπου Χ είναι ο αιώνας. Για παράδειγμα o 19os αιώνας ξεκινάει από το 1801 και τελειώνει το 1900. Ο 1ος αιώνας ξεκινάει το 1 και τελειώνει το 100. Ο 21ος αιώνας ξεκινάει το 2001 και τελειώνει το 2100. Μερικά παραδείγματα:

f(550) --> "6 century"
f(500) --> "5 century"
f(1) --> "1 century"
f(1950) --> "20 century"
f(2000) --> "20 century"
f(2001) --> "21 century"
f(2021) --> "21 century"

Άσκηση 9

Δίνεται ότι:

  • 1 κιλό είναι 2.20462 pounds
  • 2 pound είναι 16 ουγκιές <-- αυτό είναι λάθος. 1 pound είναι 16 ουγκιές

Γράψτε μία συνάρτηση με το όνομα f.1 η οποία θα παίρνει σαν παράμετρο έναν αριθμό ο οποίος θα αναπαριστάνει κιλά. Η συνάρτηση θα επιστρέφει το αντίστοιχο βάρος σε pounds.

Γράψτε μία συνάρτηση με το όνομα f.2 η οποία θα παίρνει σαν παράμετρο έναν αριθμό ο οποίς θα αναπαριστάνει pounds. Η συνάρτηση θα επιστρέφει το αντίστοιχο βάτος σε ουγκιές.

Γράψτε μία συνάρτηση με το όνομα f.3 η οποία θα παίρνει σαν παράμετρο έναν αριθμό ο οποίος θα αναπαριστάνει κιλά. Η συνάρτηση θα επιστρέφει το αντίστοιχο βάρος σε ουγκιές. Αυτή η συνάρτηση πρέπει να χρησιμοποιεί τις f.1 και f.2.

Άσκηση 10

Φτιάξτε μία συνάρτηση η οποία θα παίρνει τέσσερις παρααμέτρους: a, b, c, d. Η συνάρτηση θα επιστρέφει ένα διάνυσμα το οποίο θα περιέχει τις τιμές Χ, Υ που αναπαριστούν το σημείο στο επίπεδο όπου τέμνονται οι ευθείες:

y = a*x + c
y = b*x + d

Το σημείο αυτό είναι το εξής:

img

img

Παρατηρούμε ότι:

  • αν a == b, και c != d τότε οι ευθείες είναι παράλληλες και δεν συναντιούνται ποτέ. Σε αυτή τη περίπτωση πρέπει να επιστρέφει το string "PARALLEL".
  • Αν το a==b και c == d είναι οι ευθείες είναι οι ίδιες και έχουν άπειρα σημεία στα οποία τέμνονται. Σε αυτή τη περίπτωση πρέπει να επιστρέφει: "EQUAL LINES"

Για παράδειγμα:

f(1,2,3,4) --> επιστρέφει το διάνυσμα c(X=-1, Y=2) Δηλαδή: c(X=(4-3)/(1-2), Y=(1*(4-3)/(1-2))+3) 
f(1,1,3,4) --> επιστρέφει το string "PARALLEL"
f(1,1,3,3) --> επιστρέφει το string "EQUAL LINES"

Επαναλήψεις for.. while...

Άσκηση 11

Αν αρχίσουμε να αθροίζουμε όλους τους αριθμούς που δεν διαιρούνται με το 7 ξεκινώντας από το 1, σε ποιον αριθμό αυτό το άθροισμα θα ξεπεράσει το 10.000 ;

Άσκηση 12

Ποιο είναι το άθροισμα όλων των αριθμών από το 1 μέχρι το 10.000 που το τελευταίο ψηφίο τους είναι το 7;

Άσκηση 13

Βρείτε και τυπώστε όλους τους αριθμούς a,b,c όπου 1<=a,b,c<=100 τέτοιοι ώστε:

a2 = b2 + c2

Άσκηση 14

Γράψτε κώδικα ο οποίος να τυπώνει το παρακάτω:

9 8 7 6 5 4 3 2 1
8 7 6 5 4 3 2 1
7 6 5 4 3 2 1
6 5 4 3 2 1
5 4 3 2 1
4 3 2 1
3 2 1
2 1
1 

ΠΡΟΣΟΧΗ! χρησιμοποιήστε for ή while. Μην κάνετε κάτι τέτοιο:

print ("9 8 7 6 5 4 3 2 1")
print ("8 7 6 5 4 3 2 1")
print ("7 6 5 4 3 2 1")
print ("6 5 4 3 2 1")
print ("5 4 3 2 1")
print ("4 3 2 1")
print ("3 2 1")
print ("2 1")
print ("1") 

Άσκηση 15

Γράψτε κώδικα ο οποίος να τυπώνει το παρακάτω:

1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2
3 3 3 3 3 3 3
4 4 4 4 4 4
5 5 5 5 5
6 6 6 6
7 7 7
8 8
9

ΠΡΟΣΟΧΗ! χρησιμοποιήστε for ή while. Μην κάνετε κάτι τέτοιο:

print ("1 1 1 1 1 1 1 1 1")
print ("2 2 2 2 2 2 2 2")
print ("3 3 3 3 3 3 3")
print ("4 4 4 4 4 4")
print ("5 5 5 5 5")
print ("6 6 6 6")
print ("7 7 7")
print ("8 8")
print ("9")

Άσκηση 16

Αν αρχίσουμε να αθροίζουμε τους κύβους όλων των αριθμών (δηλαδή τη δύναμή τους στο 3), σε ποιον αριθμό το άθροισμα αυτό θα ξεπεράσει το 10.000;

Άσκηση 17

Φτιάξτε μία συνάρτηση με το όνομα f η οποία θα παίρνει δύο παράμετρους x, n. Η συνάρτηση θα επιστρέφει τη τιμή:

f(x,n) = -xn / n

Ποιο είναι το άθροισμα των τιμών της συνάρτηση f για όλα τα n από το 1 μέχρι και το 100 και x=1 ;

Άσκηση 18

Φτιάξτε μία συνάρτηση με το όνομα f η οποία θα παίρνει μία παράμετρο x ο οποίος θα είναι ένα ακέραιο αριθμό. Η συνάρτηση θα επιστρέφει:

  • Αν ο x είναι ζυγός (άρτιος) επιστρέφει: -1/x
  • Αν ο x είναι μονός (περιττός) επιστρέφει: 1/x

Βρείτε το άθροισμα όλων των τιμών της f για x από το 1 μέχρι και το 100. Δηλαδή: f(1) + f(2) + ... + f(100).

Άσκηση 19

Από όλα τα ζευγάρια των αριθμών a,b όπου 1<=a<=100 και 1<=b<=100, βρείτε ποιοι είναι αυτοί για τους οποίους ισχύει:

a2 = b2 - a3

Άσκηση 20

Ας υποθέσουμε ότι έχω σε έναν λογαριασμό 1000 ευρώ. Ο λογαριασμός αυτός τοκίζεται με 3% κάθε χρόνο. Τι ποσό θα έχει ο λογαριασμός αυτός μετά από 10 χρόνια;

Άσκηση 21

Φτιάξτε μία συνάρτηση f η οποία θα παίρνει μία παράμετρο n. Η συνάρτηση επιστρέφει: 1/(n!).

Υπολογίστε το άθροισμα των τιμών της συνάρτησης αυτή για n από 1 μέχρι και 20.

Το n! είναι το παραγοντικό και υπολογίζεται με: factorial(n).

Το παραγοντικό ενός αριθμού Ν είναι το γινόμενο: 1*2*3*...*Ν

Άσκηση 22

Για ποια τιμή του χ από το 1 μέχρι και το 100 η συνάρτηση:

f(x) = -x3 + 5x2 - 2x

Παίρνει τη μεγαλύτερη τιμή;

Άσκηση 23

Για ποια τιμή του χ από το 1 μέχρι και το 100 με βήμα 0.01 η συνάρτηση:

f(x) = log(1/x) - sin(x)

Παίρνει τη μεγαλύτερη τιμή;

hint:

seq(1, 100, by=0.01) # επιστρέφει ένα διάνυσμα από 1 μέχρι και 100 με βήμα 0.01

Διανύσματα (vectors)

Άσκηση 24

Φτιάξτε μία συνάρτηση που θα παίρνει ως παράμετρο δύο διανύσματα A και B. Η συνάρτηση θα επιστρέφει ένα νέο διάνυσμα το οποίο θα περιέχει τα στοιχεία που υπάρχουν στο A και δεν υπάρχουν στο B. Για παράδειγμα:

A <- c(1,2,3,4,5,6)
B <- c(3,4,5,6,7,8,9,10)

f(A,B) # Επιστρέφει το διάνυσμα: 1,2

Άσκηση 25

Γράψτε μία συνάρτηση η οποία θα παίρνει ως παράμετρο ένα διάνυσμα από ακέραιους αριθμούς όπου κάθε αριθμός είναι από το 1 μέχρι το 100. Η συνάρτηση θα πρέπει να επιστρέφει τον μικρότερο αριθμό από το 1 μέχρι το 100 που ΔΕΝ υπάρχει στο διάνυσμα. Αν δεν υπάρχει τέτοιος αριθμός επιστρέφει 0.

Για παράδειγμα:

a <- c(1,5,2,98,99,100)
f(a) # Επιστρέφει 3. Το 3 είναι ο μικρότερος αριθμός από το 1 μέχρι το 100 που δεν υπάρχει στο a

f(c(1:100)) # Επιστρέφει 0

Άσκηση 26

Φτιάξτε μία συνάρτηση η οποία θα παίρνει ως παράμετρο ένα διάνυσμα από ακέραιους και θα επιστρέφει το μικρότερο άρτιο (ζυγό) στοιχείο. Αν δεν υπάρχει κανένα άρτιο στοιχείο επιστρέφει 0. Για παράδειγμα:

a <- c(10,9,8,7,6,5,4,3,2,1)
f(a) # Επιστρέφει 2. Το 2 είναι ο μικρότερος ζυγός αριθμός

a <- c(5,7,9)
f(a) # Επιστρέφει 0. Δεν υπάρχει ζυγός αριθμός. 

Άσκηση 27

Φτιάξτε μία συνάρτηση η οποία θα παίρνει ως παράμετρο ένα διάνυσμα από ακέραιους και θα επιστρέφει το μεγαλύτερο περιττό (μονό) στοιχείο. Αν δεν υπάρχει κανένα περιττό στοιχείο επιστρέφει 0. Για παράδειγμα:

a <- c(10,9,8,7,6,5,4,3,2,1)
f(a) # Επιστρέφει 9. Το 9 είναι ο μεγαλύτερος μονός αριθμός

a <- c(5,15,25)
f(a) # Επιστρέφει 0. Δεν υπάρχει μονός αριθμός. 

Άσκηση 28

Φτιάξτε μία συνάρτηση η οποία θα παίρνει ως παράμετρο ένα διάνυσμα από ακέραιους και θα επιστρέφει τον αριθμό του οποίου η απόλυτη διαφορά με το 5 θα είναι μικρότερη. Ή αλλιώς θα επιστρέφει το στοιχείο του διανύσματος που έχει τη μικρότερη απόσταση με το 5. Για παράδειγμα:

a <- c(3,6,8,7,9)
f(a) # Επιστρέφει 6. Το 6 είναι ο αριθμός που έχει τη μικρότερη απόσταση από το 5. 

Hint: Η απόλυτη διαφορά μεταξύ 2 αριθμών a,b υπολογίζεται με: abs(a-b)

Άσκηση 29

Φτιάξτε μία συνάρτηση η οποία θα παίρνει ως παράμετρο ένα διάνυσμα από ακέραιους και θα επιστρέφει:

  • TRUE αν το άθροισμα των μονών (περιττών) αριθμών του διανύσματος είναι μονός
  • FALSE αν το άθροισμα των μονών (περιττών) αριθμών του διανύσματος είναι ζυγός (άρτιος)

Άσκηση 30

Έστω δύο διανύσματα A και B με αριθμούς και έστω ότι έχουν ίδιο μέγεθος. Φτιάξτε μία συνάρτηση η οποία θα παίρνει σαν παράμετρο δύο διανύσματα αυτού του είδους. Η συνάρτηση θα επιστρέφει ένα νέο διάνυσμα το οποίο θα περιέχει τα στοιχεία του A που είναι μικρότερα από τα στοιχεία του B (αν τα συγκρίνουμε στοιχείο προς στοιχείο).

Για παράδειγμα:

a <- c(9,3,5,6,5)
b <- c(3,6,8,1,4)

f(a,b) # Επιστρέφει:  c(3,5)
# Εξήγηση: Έχουμε τα εξής ζευγάρια:
# 9,3  --> 9 μεγαλύτερο ΔΕΝ ΤΟ ΚΡΑΤΑΜΕ
# 3,6  --> 3 μικρότερο  ΤΟ ΚΡΑΤΑΜΕ
# 5,8  --> 5 μικρότερο  ΤΟ ΚΡΑΤΑΜΕ
# 6,1  --> 6 μεγαλύτερο ΔΕΝ ΤΟ ΚΡΑΤΑΜΕ
# 5,4  --> 5 μεγαλύτερο ΔΕΝ ΤΟ ΚΡΑΤΑΜΕ

Άσκηση 31

Έστω ένα διάνυσμα το οποίο αποτελείται από αλφαριθμητικά. Το κάθε αλφαριθμητικό μπορεί να είναι είτε "podhlato" είτε "amaxi" είτε "ntalika". Θεωρούμε ότι το "podhlato" έχει 2 ρόδες, το "amaxi" έχει 4 ρόδες και η "ntalika" έχει 6 ρόδες.

Φτιάξτε μία συνάρτηση που θα παίρνει σαν παράμετρο ένα τέτοιο διάνυσμα και θα επιστρέφει το πλήθος από ρόδες που έχουν όλα τα οχήματα στο διάνυσμα.

Για παράδειγμα:

a <- c('ntalika', 'podhlato', 'podhlato', 'amaxi')
f(a) # Επιστρέφει 14 (6+2+2+4) 

a <- c('ntalika' 'ntalika', 'amaxi', 'podhlato', 'amaxi')
f(a) # Επιστρέφει 22 (6+6+4+2+4)

Άσκηση 32

Φτιάξτε μία συνάρτηση που να παίρνει σαν παράμετρο ένα διάνυσμα από ακέραιους αριθμούς. Η συνάρτηση θα πρέπει να επιστρέφει:

  • TRUE αν υπάρχει τουλάχιστον ένας μονός (περιττός) αριθμός
  • FALSE αν δεν υπάρχει κανένας μονός αριθμός

Άσκηση 33

Φτιάξτε 2 διανύσματα a και b με τουλάχιστον 4 ακέραιους αριθμούς (μπορείτε και παραπάνω). Θα πρέπει η παρακάτω πράξη να βγάζει αποτέλεσμα TRUE:

sum(a[a<b]) == sum(b[b<a])

Άσκηση 34

Έστω δύο διανύσματα heights και weights. Το πρώτο περιέχει το βάρος ενός συνόλου ανθρώπων και το δεύτερο έχει το βάρος τους. Φτιάξτε μία συνάρτηση η οποία θα παίρνει ως παράμετρους δύο διανύσματα όπως τα heights και weights. Η συνάρτηση θα επιστρέφει το πλήθος των ανθρώπων που το Body Mass Index τους (βάρος/(ύψος2) είναι μεγαλύτερο από 30.

Άσκηση 35

Φτιάξτε μία συνάρτηση η οποία θα παίρνει ως παράμετρο ένα διάνυσμα με αριθμούς. Η συνάρτηση θα επιστρέφει τον μέσο όρο όλων των στοιχείων αν αφαιρέσουμε το μεγαλύτερο και το μικρότερο. Για παράδειγμα:

f(c(20,10,5,13,17,13,4,8,1,6)) # Επιστρέφει: 9.5 mean(c(10,5,13,17,13,4,8,6)) (αφαιρέσαμε το μεγαλύτερο (20) και το μικρότερο (1))

Άσκηση 36

Έστω δύο διανύσματα ages και weights. Το πρώτο περιέχει τις ηλικίες ενός συνόλου ανθρώπων και το δεύτερο έχει το βάρος τους. Φτιάξτε μία συνάρτηση η οποία θα παίρνει ως παράμετρους δύο διανύσματα όπως τα ages και weights. Η συνάρτηση θα επιστρέφει το βάρος του ανθρώπου που έχει τη μεγαλύτερη ηλικία . Για παράδειγμα:

ages <- c(60,40,70,50)
weights <- c(87, 71, 61, 90)

f(ages, weights) # επιστρέφει 61 
# εξήγηση: τη μεγαλύτερη ηλικία την έχει ο 3ος ανθρωπος (70). Το βάρος του 3ου ανθρώπου είναι 61

Άσκηση 37

Φτιάξτε μία συνάρτηση που θα παίρνει ως παράμετρο ένα διάνυσμα. Η συνάρτηση θα πρέπει να επιστρέφει ένα νέο διάνυσμα όπου το τελευταίο στοιχείο θα έχει μπει στην αρχή. Για παράδειγμα:

a <- c(1,2,3,4)
f(a)
# Επιστρέφει το διάνυσμα: 4,1,2,3 

Ένα άλλο παράδειγμα:

a <- c("hrakleio", 'larissa', 'athens', 'chania')
f(a)
# Επιστρέφει το διάνυσμα: c("chania", "hrakleio", 'larissa', 'athens')

Άσκηση 38

Φτιάξτε μία συνάρτηση η οποία θα παίρνει ως παράμετρο δύο διάνυσμα a και b με ακέραιες τιμές από το 1 μέχρι το 100. Η συνάρτηση θα πρέπει να επιστρέφει ένα διάνυσμα με όλες τις τιμές από το 1 μέχρι το 100 που ΔΕΝ υπάρχουν ούτε στο a ούτε στο b.

Άσκηση 39

Φτιάξτε μία συνάρτηση που θα παίρνει ως παράμετρο ένα διάνυσμα a με ακέραιους αριθμούς. Η συνάρτηση θα επιστρέφει ένα διάνυσμα με όλες τις τιμές του a που υπάρχουν μόνο μία φορά μέσα στον a.

Για παράδειγμα:

a <- c(2,3,1,2,4,1)
f(a) # επιστρέφει: 3,4

Πίνακες (matrix)

Άσκηση 40

Έστω x1 ο αριθμός της γραμμής και y1 ο αριθμός της στήλης ενός στοιχείου σε έναν πίνακα. Έστω x2 ο αριθμός της γραμμής και y2 ο αριθμός της στήλης ενός άλλου στοιχείου στον ίδιο πίνακα.

Φτιάξτε μία συνάρτηση που να παίρνει ως παραμέτρους τους αριθμούς x1, y1, x2, y2 και να επιστρέφει TRUE/FALSE ανάλογα μα το αν αυτά τα δύο στοιχεία είναι στην ίδια γραμμή ή στην ίδια στήλη

Παράδειγμα:

0 1 0
0 0 1
0 0 0
x1=1, y1=2, x2=2, y2=3 --> FALSE


0 1 0
1 0 0
0 0 0
x1=1, y1=2, x2=2, y2=1 --> FALSE

0 0 0
0 1 0
0 0 1
x1=2, y1=2, x2=3, y2=3 --> FALSE

1 0 1
0 0 0
0 0 0
x1=1, y1=1, x2=1, y2=3 --> TRUE

1 0 0
0 0 0
0 1 0
x1=1, y1=1, x2=3, y2=2 --> FALSE

1 0 0
1 0 0
0 0 0
x1=1, y1=1, x2=2, y2=1 --> TRUE


Η συνάρτηση θα πρέπει να μην υποθέτει ότι ο πίνακας έχει συγκεκριμένο πλήθος γραμμών και στηλών.

Άσκηση 41

Φτιάξτε μία συνάρτηση που θα παίρνει ως παράμετρο έναν πίνακα (matrix). Η συνάρτηση Θα επιστρέφει το άθροισμα όλων των στοιχείων που δεν ανήκουν στη περίμετρό του. Για παράδειγμα: Έστω

a = 
1 3 5 6
4 2 3 1
5 4 2 1

Επιστρέφει: 2+3=5

Η συνάρτηση θα πρέπει να μην υποθέτει ότι ο πίνακας έχει συγκεκριμένο πλήθος γραμμών και στηλών.

Άσκηση 42

Φτιάξτε μία συνάρτηση που θα παίρνει ως παράμετρο έναν πίνακα (matrix). Η συνάρτηση θα επιστρέφει τον αριθμό της στήλης που έχει το μεγαλύτερο άθροισμα. Για παράδειγμα:

Έστω:

a = 
1 3 5 6
4 2 3 1
5 4 3 1

Τα αθροίσματα των στηλών είναι:

1η στήλη: 1+4+5 = 10
2η στήλη: 3+2+4 = 9
3η στήλη: 5+3+3 = 11
4η στήλη: 6+1+1 = 8

Η στήλη με το μεγαλύτερο άθροισμα είναι η 3η. Άρα θα επιστρέφει: 3

Η συνάρτηση ΔΕΝ θα πρέπει να υποθέτει ότι ο πίνακας έχει συγκεκριμένο πλήθος γραμμών και στηλών.

Άσκηση 43

Φτιάξτε μία συνάρτηση που θα παίρνει ως παράμετρο έναν πίνακα (matrix). Η συνάρτηση θα επιστρέφει το άθροισμα των στοιχείων που βρίσκονται στις 4 γωνίες του.

Έστω:

a = 
1 3 5 6
4 2 3 1
5 4 2 1

Τα στοιχεία που βρίσκονται στις 4 γωνίες είναι:

1 - - 6
- - - -
5 - - 1

Το άθροισμα των στοιχείων που ανήκουν στις 4 γωνίες είναι: 1+6+5+1 = 13. Άρα η συνάρτηση θα πρέπει να επιστρέφει: 13

Η συνάρτηση ΔΕΝ θα πρέπει να υποθέτει ότι ο πίνακας έχει συγκεκριμένο πλήθος γραμμών και στηλών.

Άσκηση 44

Φτιάξτε μία συνάρτηση που θα παίρνει ως παράμετρο έναν πίνακα (matrix). Η συνάρτηση θα επιστρέφει τον ίδιο πίνακα όπου όμως όλα τα στοιχεία που ανήκουν στη διαγώνια θα είναι -1.

Για παράδειγμα:

a = 
1 3 5 6
4 2 3 1
5 4 2 1
6 4 3 8

f(a) επιτρέφει:

a = 
-1  3  5  6
 4 -1  3  1
 5  4 -1  1
 6  4  3 -1

Άσκηση 45

Φτιάξτε μία συνάρτηση που θα παίρνει ως παράμετρο έναν πίνακα (matrix). Ο πίνακας θα έχει μόνο τιμές 0 ή 1. Η συνάρτηση θα επιστρέφει TRUE ή FALSE ανάλογα με αν υπάρχει έστω μία στήλη όπου το πλήθος των στοιχείων της που είναι "0" είναι περιττός (μονός).

Παράδειγμα:

a = 
0 1 0 0 
1 1 0 1
0 0 1 1
0 0 0 1

Το πλήθος των "0" σε κάθε στήλη είναι:

a = 
0 1 0 0 
1 1 0 0 
1 0 1 0 
0 0 0 0 
| | | |
2 2 3 4

Βλέπουμε ότι υπάρχει μία στήλη όπου το πλήθος από "0" είναι μονός αριθμός (η 3η στήλη). Άρα επιστρέφει TRUE.

Ένα άλλο παράδειγμα:

a = 
0 1 1 0  
1 1 1 0 
1 0 1 0  
0 0 1 0 
| | | |
2 2 0 4

Εδώ δεν υπάρχει καμία στήλη όπου το πλήθος από "0" να είναι μονός αριθμός, άρα επιστρέφει FALSE.

Η συνάρτηση ΔΕΝ θα πρέπει να υποθέτει ότι ο πίνακας έχει συγκεκριμένο πλήθος γραμμών και στηλών.

Άσκηση 46

Φτιάξτε μία συνάρτηση η οποία θα παίρνει ως παράμετρο έναν αριθμός N>=1. Θα επιστρέφει έναν πίνακα NxN τέτοιο ώστε:

  • Όλα τα στοιχεία που ανήκουν στη περίμετρο του πίνακα θα είναι Ν
  • Όλα τα στοιχεία που ΔΕΝ ανήκουν στη περίμετρο θα είναι 0.

Για παράδειγμα:

f(3) # Epistrefei ton pinaka:
3 3 3
3 0 3 
3 3 3


f(4) # Epistrefei ton pinaka:
4 4 4 4
4 0 0 4
4 0 0 4
4 4 4 4


f(5) # Epistrefei ton pinaka:
5 5 5 5 5
5 0 0 0 5
5 0 0 0 5
5 0 0 0 5
5 5 5 5 5 

Άσκηση 47

Φτιάξτε μία συνάρτηση η οποία θα παίρνει 2 ακέραιους αριθμούς K και L. Θα επιστρέφει έναν πίνακα διαστάσεων K x L, τέτοιο ώστε:

  • Στις μονές γραμμές οι μονές στήλες είναι 1 και οι ζυγές στήλες 0.
  • Στις ζυγές γραμμές οι ζυγές στήλες είναι 1 και οι μονές στήλες 0.

Για παράδειγμα: f(4,4) επιστρέφει:

1 0 1 0
0 1 0 1 
1 0 1 0
0 1 0 1

Άσκηση 48

Φτιάξτε μία συνάρτηση η οποία θα παίρνει σαν όρισμα έναν πίνακα A. Θα επιστρέφει έναν νεό πίνακα ο οποίος θα περιέχει τον A στις 4 γωνίες του. Δηλαδή ο πίνακας που θα επιστρέφει θα είναι ο:

 A -A
-A  A

Για παράδειγμα. Έστω A:

3 5
7 1

Θα επιστρέφει:

 3  5 -3 -5
 7  1 -7 -1
-3 -5  3 5
-7 -1  7 1

Ένα άλλο παράδειγμα: Έστω A:

3 5 0 
7 1 9

Ο πίνακας που θα επιστρέφει θα είναι:

 3  5  0 -3 -5  0 
 7  1  9 -7 -1 -9
-3 -5  0  3  5  0 
-7 -1 -9  7  1  9

Άσκηση 49

Φτιάξτε μία συνάρτηση η οποία θα παίρνει ως παράμετρο έναν πίνακα Μ Χ Ν. Η συνάρτηση θα επιστρέφει έναν νέο πίνακα (Μ-1) Χ (Ν-1) ο οποίος θα "περιέχει" μόνο τα στοιχεία του πίνακα που δεν ανήκουν στη περίμετρό του.

Για παράδειγμα: Έστω A:

3 8 9 5
7 5 5 1
1 4 9 0
2 6 4 8

Η συνάρτηση θα επιστρέφει τον παρακάτω πίνακα:

5 5
4 9

Άσκηση 50

Φτιάξτε μία συνάρτηση που θα παίρνει σαν όρισμα έναν τετραγωνικό πίνακα. Η συνάρτηση θα επιστρέφει TRUE/FALSE ανάλογα με το αν η διαγώνιος (από τα αριστερά προς τα δεξιά) είναι μικρότερη από την αντιδιαγώνιο (από το δεξιά προς τα αριστερά). Για παράδειγμα:

1 4 6
5 4 2
9 8 1

Η κύρια διαγώνιος έχει άθροισμα: 1+4+1 = 6

Η αντιδιαγώνιος έχει άθροισμα: 9+4+6 = 19

Η κύρια διαγώνιος είναι μικρότερη από τη αντιδιαγώνιο οπότε επιστρέφει: TRUE

Άσκηση 51

Φτιάξτε μία συνάρτηση που θα παίρνει σαν όρισμα 2 πίνακες ίδιων διαστάσεων A και B. Θα επιστρέφει έναν νέο πίνακα ο οποίος θα περιέχει το μικρότερο στοιχείο κάθε θέσης από τους 2 πίνακες. Για παράδειγμα:

Έστω A

1 3 5
5 4 0
8 4 7

Έστω B

3 1 0
4 6 8
2 6 3

Επιστρέφει:

1 1 0
4 4 0
2 4 3

Άσκηση 52

Γράψτε μία συνάρτηση η οποία θα παίρνει ως παράμετρο έναν πίνακα με ακέραιους. Η συνάρτηση θα επιστρέφει έναν νέο πίνακα όπου:

  • Στη θέση όπου ο A είχε μονά στοιχεία, ο νέος πίνακα θα έχει τον αριθμό: 1
  • Στη θέση όπου ο A είχε άρτια (ζυγά) στοιχεία, ο νέος πίνακας θα έχει τον αριθμό: -1.

Για παράδειγμα: Έστω A=

3 6 4 8
4 6 9 1
3 5 6 1
3 4 2 6

Τότε η συνάρτησή σας θα επιστρέφει τον πίνακα:

 1 -1 -1 -1
-1 -1  1  1
 1  1 -1  1
 1 -1 -1 -1

Άσκηση 53

Φτιάξτε μία συνάρτηση η οποία θα επιστρέφει έναν πίνακα με 100 γραμμές και 10 στήλες ο οποίος θα περιέχει τη προπαίδεια όλων των αριθμών από το 1 μέχρι και το 100. Δηλαδή:

  • Η πρώτη γραμμή θα περιέχει τη προπαίδεια του 1
  • Η 2η γραμμή θα περιέχει τη προπαίδεια του 2
  • ...
  • Η 100η γραμμή θα περιέχει τη προπαίδεια του 100

Σημείωση: Ως προπαίδεια εννοούμε το γινόμενο ενός αριθμού με όλους τους αριθμούς από το 1 μέχρι 10.

Άσκηση 54

Φτιάξτε μία συνάρτηση η οποία θα παίρνει σαν παράμετρο μία λίστα με πίνακες. Θα επιστρέφει τον πίνακα ο οποίος έχει το μικρότερο άθροισμα στοιχείων.

Άσκηση 55

Φτιάξτε μία συνάρτηση που θα παίρνει σαν παράμετρο μία λίστα με πίνακες. Θα επιστρέφει τον πίνακα με τα λιγότερα στοιχεία. Αν υπάρχουν περισσότεροι από έναν πίνακες με τα λιγότερα στοιχεία επιστρέφει απλά έναν από αυτούς.

Άσκηση 56

Φτιάξτε μία συνάρτηση που θα παίρνει σαν παράμετρο μία λίστα με πίνακες οι οποίοι περιέχουν ακέραιους αριθμούς. Θα επιστρέφει τον πίνακα με τους λιγότερους μονούς (περιττούς) αριθμούς. Αν υπάρχουν περισσότεροι από έναν πίνακες με αυτή την ιδιότητα απλά επιστρέφει έναν από αυτούς.

Λίστες

Άσκηση 57

Φτιάξτε μία λίστα η οποία να περιέχει ένα οποιοδήποτε πίνακα, δύο οποιαδήποτε διανύσματα, έναν οποιοδήποτε ακέραιο, μία οποιαδήποτε λογική τιμή (TRUE/FALSE), ένα οποιοδήποτε αλφαριθμητικό, ένα οποιοδήποτε data frame και δύο οποιεσδήποτε λίστες.

Άσκηση 58

Φτιάξτε μία λίστα η οποία να έχει:

  • το στοιχεία με το όνομα a το οποίο είναι ένας ακέραιος
  • το στοιχείο με το όνομα b το οποίο είναι μία λίστα
  • το στοιχείο με το όνομα c το οποίο είναι ένα αλφαριθμητικό.

Το a και το c μπορεί να περιέχουν ότι τιμή θέλετε. Το στοιχείο με το όνομα b πρέπει να είναι μία λίστα η οποία να έχει δύο στοιχεία:

  • το στοιχείο με το όνομα v το οποίο είναι ένα διάνυσμα με τις τιμές 10,11,12 και
  • το στοιχείο με το όνομα name το οποίο να είναι μία λίστα η οποία να περιέχει δύο στοιχεία:
    • το στοιχείο με το όνομα my.name το οποίο περιέχει το όνομά σας (σε greeklish), και
    • το στοιχείο με το όνομα my.surname το οποιό περιέχει το επίθετό σας (σε greeklish)

Άσκηση 59

Έστω μία λίστα η οποία αντιπροσωπεύει ένα παραλληλόγραμμο και περιέχει 2 στοιχεία, τα a,b τα οποία είναι και τα μήκη των πλευρών του. Για παράδειγμα:

a <- list(a=30, b=30)

Φτιάξτε μία συνάρτηση η οποία θα παίρνει σαν παράμετρο μία λίστα όπως περιγράφηκε παραπάνω. Η συνάρτηση θα επιστρέφει TRUE αν το εμβαδόν του παραλληλεπίπεδου είναι μεγαλύτερο ή ίσο με 100. Διαφορετικά επιστρέφει FALSE.

Για παράρδειγμα:

a <- list(a=9, b=10)
f(a) # επιστρέφει FALSE

a <- list(a=10, b=11)
f(a) # επιστρέφει TRUE

Το εμβαδόν ενός παραλληλεπίπεδου είναι το γινόμενο του μήκους επί το πλάτους του.

Άσκηση 60

Ας υποθέσουμε ότι έχουμε μία λίστα που περιέχει πολλά παραλληλεπίπεδα. Κάθε παραλληλεπίπεδο είναι μία λίστα που έχει δύο στοιχεία: το a και το b τα οποία αντιπροσωπεύουν το μήκος και το πλάτος του. Για παράδειγμα:

a<-list(
    list(a=10, b=20),
    list(a=14, b=23),
    list(a=21, b=18),
    list(a=18, b=19),
    list(a=16, b=22),
    list(a=16, b=27),
    list(a=29, b=16),
    list(a=21, b=11),
    list(a=22, b=14),
    list(a=20, b=17)
)

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

Το εμβαδόν ενός παραλληλεπίπεδου είναι το γινόμενο του μήκους επί το πλάτους του.

Άσκηση 61

Ας υποθέσουμε ότι έχουμε μία λίστα η οποία έχει πολλές λίστες. Κάθε υπο-λίστα αντιπροσωπεύει ένα παραλληλεπίπεδο και έχει δύο πεδία: το a και το b τα οποία αντιπροσωπεύουν το μήκος και το πλάτος του. Για παράδειγμα:

l<-list(
    list(a=10, b=20),
    list(a=14, b=23),
    list(a=21, b=18),
    list(a=18, b=19),
    list(a=16, b=22),
    list(a=16, b=27),
    list(a=29, b=16),
    list(a=21, b=11),
    list(a=22, b=14),
    list(a=20, b=17)
)

Γράψτε μία συνάρτηση η οποία θα παίρνει σαν παράμετρο μία λίστα όπως αυτή που περιγράφηκε παραπάνω. Η συνάρτηση θα επιστρέφει μία νέα λίστα η οποία θα περιέχει ακριβώς τα ίδια στοιχεία, όπου όμως κάθε υπο-λίστα θα έχει ένα νέο πεδίο με το όνομα area με το εμβαδόν κάθε παραλληλεπίπεδου. Για παράδειγμα αν l είναι το παράδειγμα που δόθηκε παραπάνω, τότε θα πρέπει:

f(l)

# επιστρέφει:
list(
    list(a=10, b=20, area=200),
    list(a=14, b=23, area=322),
    list(a=21, b=18, area=378),
    list(a=18, b=19, area=342),
    list(a=16, b=22, area=352),
    list(a=16, b=27, area=432),
    list(a=29, b=16, area=464),
    list(a=21, b=11, area=231),
    list(a=22, b=14, area=308),
    list(a=20, b=17, area=340)
)

Το εμβαδόν ενός παραλληλεπίπεδου είναι το γινόμενο του μήκους επί το πλάτους του.

Άσκηση 62

Ας υποθέσουμε ότι έχουμε μία λίστα η οποία έχει πολλές λίστες. Κάθε υπο-λίστα αντιπροσωπεύει ένα παραλληλεπίπεδο και έχει τρία πεδία: το name περιέχει ένα όνομα, ενώ τα a και το b αντιπροσωπεύουν το μήκος και το πλάτος του. Για παράδειγμα:

l<-list(
    list(name='aa', a=10, b=20),
    list(name='bb', a=14, b=23),
    list(name='cc', a=21, b=18),
    list(name='dd', a=18, b=19),
    list(name='ee', a=16, b=22),
    list(name='ff', a=16, b=27),
    list(name='gg', a=29, b=16),
    list(name='hh', a=21, b=11),
    list(name='ii', a=22, b=14),
    list(name='jj', a=20, b=17)
)

Φτιάξτε μία συνάρτηση η οποία θα παίρνει ως παράμετρο μία τέτοια λίστα. Η συνάρτηση Θα επιστρέφει ένα διάνυσμα το οποίο θα περιέχει τα ονόματα (δηλαδή το περιεχόμενο του πεδίου name) των παραλληλεπίπεδων με εμβαδόν μεγαλύτερο από 300.

Το εμβαδόν ενός παραλληλεπίπεδου είναι το γινόμενο του μήκους επί το πλάτους του.

Άσκηση 63

Ας υποθέσουμε ότι έχουμε μία λίστα η οποία έχει πολλές λίστες. Κάθε υπο-λίστα αντιπροσωπεύει ένα παραλληλεπίπεδο και έχει τρία πεδία: το name περιέχει ένα όνομα, ενώ τα a και το b αντιπροσωπεύουν το μήκος και το πλάτος του. Για παράδειγμα:

l<-list(
    list(name='aa', a=10, b=20),
    list(name='bb', a=14, b=23),
    list(name='cc', a=21, b=18),
    list(name='dd', a=18, b=19),
    list(name='ee', a=16, b=22),
    list(name='ff', a=16, b=27),
    list(name='gg', a=29, b=16),
    list(name='hh', a=21, b=11),
    list(name='ii', a=22, b=14),
    list(name='jj', a=20, b=17)
)

Φτιάξτε μία συνάρτηση η οποία θα παίρνει ως παράμετρο μία τέτοια λίστα. Η συνάρτηση Θα επιστρέφει το όνομα του παραλληλεπίπεδου που έχει το μεγαλύτερο εμβαδόν.

Το εμβαδόν ενός παραλληλεπίπεδου είναι το γινόμενο του μήκους επί το πλάτους του.

Άσκηση 64

Φτιάξτε μια συνάρτηση που να δέχεται δύο παράμετρους. Κάθε παράμετρος θα είναι μία λίστα με αριθμούς. Η συνάρτηση θα επιστρέφει μια λίστα με το μικρότερο στοιχείο κάθε θέσης. Σε περίπτωση που ο χρήστης δώσει λίστες με διαφορετικό μέγεθος θα επιστρέφει το αλφαριθμητικό: "error".

Άσκηση 65

Φτιάξτε μια συνάρτηση που θα έχει τρεις παράμετρους. Και οι 3 θα είναι λίστες με αριθμούς. Και οι 3 θα έχουν ίδιο μέγεθος. Η συνάρτηση θα επιστρέφει ένα πίνακα του οποίου οι γραμμές θα αποτελούνται από αυτές τις 3 λίστες. H πρώτη γραμμή θα έχει τους αριθμούς που βρίσκονται στη λίστα με το μικρότερο άθροισμα, η 2η γραμμή θα έχει τους αριθμούς που βρίσκονται στη λίστα με το 2ο μεγαλύτερο άθροισμα και η 3η στήλη θα έχει τους αριθμούς που βρίσκονται στη λίστα με το μεγαλύτερο άθροισμα.

Άσκηση 66

Δίνεται ότι η συνάρτηση typeof επιστρέφει τον τύπο μίας μεταβλητής στην R. Για παράδειγμα:

typeof("hello") # Επιστρέφε "character"

Φτιάξτε μία συνάρτηση η οποία θα παίρνει σαν παράμετρο μία λίστα. Θα επιστρέφει μία νέα λίστα η οποία θα περιέχει μόνο τα στοιχεία της λίστας των οποίων ο τύπος τους ΔΕΝ είναι αλφαριθμητικά ("character")

Άσκηση 67

Γράξτε κώδικα σε R έτσι ώστε όταν γράφω:

a$b$a$b$a

Να τυπώνει "hello"

Άσκηση 68

Γράψτε κώδικα σε R έτσι ώστε όταν γράφω:

a[[a$a$a]]

Να τυπώνει "hello"

Άσκηση 69

Δίνεται η παρακάτω συνάρτηση η οποία παίρνει σαν παράμετρο ένα string το οποία περιέχει μία πρόταση (έχει δηλαδή και κενά). Η συνάρτηση επιστρέφει ένα διάνυσμα το οποίο περιέχει όλες τις λέξεις της πρότασης:

to.words <- function(sentence) {
    return (strsplit(sentence, " ")[[1]])
}

Για παράδειγμα:

to.words('I love working with R') # Επιστρέφει το διάνυσμα c('I', 'love', 'working', 'with', 'R')

Φτιάξτε μία συνάρτηση η οποία θα παίρνει σαν παράμετρο ένα string το οποία περιέχει μία πρόταση (έχει δηλαδή και κενά). Η συνάρτηση η επιστρέφει μία λίστα η οποία ως πεδία θα έχει όλες τις λέξεις της πρότασης. Οι τιμές κάθε πεδίου θα είναι το μήκος της κάθε λέξης. Θα πρέπει δηλαδή να μπορώ να μπορώ να γράφω:

l <- f('I love working with R')
print (l$love) # Τυπώνει 4
print (l$R) # Τυπώνει 1

Δίνεται ότι η συνάρτηση nchar επιστρέφει το μήκος ενός string:

print (nchar('hello')) # Τυπώνει 5

Δίνεται επίσης ότι αν a είναι μία μεταβλητή τύπου char και l είναι μία μεταβλητή τύπου λίστα, τότε ο τρόπος για να προσθέσεις ένα πεδίο με τη τιμή της μεταβλητής a είναι:

l[[a]] <- ..εδώ βάλε ότι τιμή θέλεις να βάλεις σε αυτό το πεδίο..

π.χ.:

l <- list()
a <- 'mitsos'
l[[a]] <- 4

print (l$mitsos) # Τυπώνει 4

Άσκηση 70

Γράψτε κώδικα R τέτοιον ώστε όταν γράφω:

a[[a[[a$a]]]]

Να τυπώνει "hello"

Άσκηση 71

Μία εταιρία, έχει για κάθε εργαζόμενο μία λίστα με τα παρακάτω πεδία:

  • Πεδίο name: περιέχει το όνομα του εργαζομένου
  • Πεδίο salary: περιέχει τον μισθό του εργαζόμενου
  • Πεδίο project: Το όνομα του project στο οποίο εργάζεται

Η ίδια εταιρία έχει για κάθε project που διαχειρίζεται, μία λίστα με τη παρακάτω δομή:

  • Πεδίο name: περιέχει το όνομα του project
  • Πεδίο value: περιέχει την αξία του project

Ας υποθέσουμε λοιπόν ότι υπάρχει η λίστα employees η οποία περιέχει τα στοιχεία για 100 εργαζόμενους της εταιρίας και η λίστα projects η οποία περιέχει τα στοιχεία για 20 projects που διαχειρίζεται η εταιρία.

Ισχύει δηλαδή ότι:

employees <- list(
   list(name="a", salary=10, project="p1"),
   list(name="b", salary=20, project="p2"),
   ....  # synolo 100 stoixeia
   )

projects <- list(
    list(name="p1", value=1000),
    list(name="p2", value=2000),
    ... # synolo 20 stoixeia
)

Φτιάξτε μία συνάρτηση η οποία θα παίρνει ένα όρισμα με το όνομα project.name το οποίο θα είναι το όνομα ενός project. Η συνάρτηση θα επιστρέφει μία λίστα με τα ονόματα όλων των εργαζομένων σε αυτό.

Άσκηση 72

Μία εταιρία, έχει για κάθε εργαζόμενο μία λίστα με τα παρακάτω πεδία:

  • Πεδίο "name": περιέχει το όνομα του εργαζομένου
  • Πεδίο "salary": περιέχει τον μισθό του εργαζόμενου
  • Πεδίο "project": Το όνομα του project στο οποίο εργάζεται

Η ίδια εταιρία έχει για κάθε project που διαχειρίζεται, μία λίστα με τη παρακάτω δομή:

  • Πεδίο name: περιέχει το όνομα του project
  • Πεδίο value: περιέχει την αξία του project

Ας υποθέσουμε λοιπόν ότι υπάρχει η λίστα employees η οποία περιέχει τα στοιχεία για 100 εργαζόμενους της εταιρίας και η λίστα projects η οποία περιέχει τα στοιχεία για 20 projects που διαχειρίζεται η εταιρία.

Ισχύει δηλαδή ότι:

employees <- list(
   list(name="a", salary=10, project="p1"),
   list(name="b", salary=20, project="p2"),
   ....  # synolo 100 stoixeia
   )

projects <- list(
    list(name="p1", value=1000),
    list(name="p2", value=2000),
    ... # synolo 20 stoixeia
)

Φτιάξτε μία συνάρτηση η οποία θα παίρνει ένα όρισμα με το όνομα project.name το οποίο θα είναι το όνομα ενός project. Η συνάρτηση θα επιστρέφει τον μέσο όρο του μισθού όλων των εργαζομένων που απασχολούνται στο project με αυτό το όνομα.

data frames

Άσκηση 73

Σε αυτή τη σελίδα: https://en.wikipedia.org/wiki/List_of_cities_and_towns_in_Greece υπάρχει μία λίστα με τον πληθυσμό των Ελληνικών πόλεων.

Μπορείτε να κατεβάσετε ένα μέρος από τον πίνακα αυτός σε μορφή R data frame με την εντολή:

cities <- read.csv('https://www.dropbox.com/s/fuihnmk8fr0hozb/cities.csv?dl=1')

Εναλλακτικό αν δεν δουλεύει το παραπάνω:

cities <- read.csv("https://raw.githubusercontent.com/kantale/biol-109/main/cities.csv")

Κάντε copy-paste αυτή την εντολή.

Το data.frame cities περιέχει τις εξής στήλες:

  • names: Το όνομα της πόλης
  • population: Ο πληθυσμός της πόλης (απογραφή 2011)
  • region: Η περιφέρεια στην οποία ανήκει η πόλη

Χρησιμοποιώντας το data frame cities, απαντήστε με κώδικα R στο ερώτημα:

Ποιος είναι ο μέσος όρος του πληθυσμού όλων των πόλεων της Ελλάδας με πληθυσμό μικρότερο από 100.000;

Άσκηση 74

Σε αυτή τη σελίδα: https://en.wikipedia.org/wiki/List_of_cities_and_towns_in_Greece υπάρχει μία λίστα με τον πληθυσμό των Ελληνικών πόλεων.

Μπορείτε να κατεβάσετε ένα μέρος από τον πίνακα αυτό σε μορφή R data frame με την εντολή:

cities <- read.csv('https://www.dropbox.com/s/fuihnmk8fr0hozb/cities.csv?dl=1')

Εναλλακτικό αν δεν δουλεύει το παραπάνω:

cities <- read.csv("https://raw.githubusercontent.com/kantale/biol-109/main/cities.csv")

Κάντε copy-paste αυτή την εντολή.

Το data.frame cities περιέχει τις εξής στήλες:

  • names: Το όνομα της πόλης
  • population: Ο πληθυσμός της πόλης (απογραφή 2011)
  • region: Η περιφέρεια στην οποία ανήκει η πόλη

Χρησιμοποιώντας το data frame cities, απαντήστε με κώδικα R στο ερώτημα:

Ποια είναι η δεύτερη μικρότερη σε πληθυσμό πόλη της περιφέρειας Crete;

Άσκηση 75

Σε αυτή τη σελίδα: https://en.wikipedia.org/wiki/List_of_cities_and_towns_in_Greece υπάρχει μία λίστα με τον πληθυσμό των Ελληνικών πόλεων.

Μπορείτε να κατεβάσετε ένα μέρος από τον πίνακα αυτό σε μορφή R data frame με την εντολή:

cities <- read.csv('https://www.dropbox.com/s/fuihnmk8fr0hozb/cities.csv?dl=1')

Εναλλακτικό αν δεν δουλεύει το παραπάνω:

cities <- read.csv("https://raw.githubusercontent.com/kantale/biol-109/main/cities.csv")

Κάντε copy-paste αυτή την εντολή.

Το data.frame cities περιέχει τις εξής στήλες:

  • names: Το όνομα της πόλης
  • population: Ο πληθυσμός της πόλης (απογραφή 2011)
  • region: Η περιφέρεια στην οποία ανήκει η πόλη

Χρησιμοποιώντας το data frame cities, απαντήστε με κώδικα R στο ερώτημα:

Ποια περιφέρεια της Ελλάδας έχει το δεύτερο μικρότερο πληθυσμό; (πληθυσμός μίας περιφέρειας = το άθροισμα των πληθυσμών των πόλεών της).

Άσκηση 76

Σε αυτή τη σελίδα: https://en.wikipedia.org/wiki/List_of_cities_and_towns_in_Greece υπάρχει μία λίστα με τον πληθυσμό των Ελληνικών πόλεων.

Μπορείτε να κατεβάσετε ένα μέρος από τον πίνακα αυτό σε μορφή R data frame με την εντολή:

cities <- read.csv('https://www.dropbox.com/s/fuihnmk8fr0hozb/cities.csv?dl=1')

Εναλλακτικό αν δεν δουλεύει το παραπάνω:

cities <- read.csv("https://raw.githubusercontent.com/kantale/biol-109/main/cities.csv")

Κάντε copy-paste αυτή την εντολή.

Το data.frame cities περιέχει τις εξής στήλες:

  • names: Το όνομα της πόλης
  • population: Ο πληθυσμός της πόλης (απογραφή 2011)
  • region: Η περιφέρεια στην οποία ανήκει η πόλη

Χρησιμοποιώντας το data frame cities, απαντήστε με κώδικα R στο ερώτημα:

Ποιες πόλεις της περιφέρειας "Attica" έχουν πληθυσμό μικρότερο από τον μέσο όρο του πληθυσμού της περιφέρειας 'Crete';

Άσκηση 77

Ο παρακάτω κώδικας:

genes <- data.frame(
    name = unlist(lapply(c(1:10), function(x) { return (paste('Gene', x))})),
    start = as.integer(runif(10, 1000, 2000)),
    end = as.integer(runif(10, 2001, 3000))
   )   

Κάντε copy-paste αυτές τις εντολές.

Παράγει ένα τυχαίο data.frame με το όνομα genes το οποίο περιέχει τις ακόλουθες στήλες:

  • name: το όνομα ενός γονιδίου.
  • start: μία θέση από όπου ξεκινάει
  • end: μία θέση όπου τελειώνει.

Γράψτε κώδικα R ο οποίος προσθέτει μία καινούργια στήλη στο genes με το όνομα length. Η στήλη αυτή θα περιέχει τη θέση που βρίσκεται η μέση του κάθε γονιδίου. Η μέση ενός γονιδίου ορίζεται ως: αρχή + (τέλος-αρχη)/2. Για παράδειγμα ένα γονίδιο που ξεκινάει στη θέση 500 και τελειώνει στη θέση 700 έχει σαν μέση τη θέση: 600.

Άσκηση 78

Φτιάξτε ένα data frame που να περιέχει 20 γραμμές. Το data frame πρέπει να περιέχει τις εξής στήλες (δίνεται ΟΝΟΜΑ: περιγραφή):

  • A: περιέχει τυχαίες τιμές από το 1 μέχρι το 200
  • B: περιέχει τυχαίες τιμές από το 1 μέχρι το 200
  • C: περιέχει την ίδια τιμή με τη στήλη A αν η τιμή της στήλης A είναι μεγαλύτερη από τη τιμή της στήλης B, αλλιώς περιέχει τη τιμή της στήλης B.
  • D: περιέχει την απόλυτη τιμή της διαφοράς των στηλών A και B (η απόλυτη τιμή ενός αριθμούς n είναι: abs(n))
  • E: περιέχει τον μέσο όρο των τιμών της στήλης A και B.

Άσκηση 79

Το παρακάτω data frame περιέχει τους βαθμούς που γράψανε στη πρόοδο και στο τελικό διαγώνισμα 10 φοιτητές:

grades <- data.frame(
  name = unlist(lapply(1:10, function(x) paste('Student', x))),
  proodos = c(9,6,5,8,1,1,9,8,6,8),
  teliko = c(8,7,7,5,2,5,3,9,9,9)
)

Κάντε copy-paste αυτές τις εντολές.

Ας υποθέσουμε τα εξής:

  • Η πρόοδος (proodos) μετράει για το 40% της τελικής βαθμολογίας
  • Το τελικό διαγώνισμα (teliko) μετράει για το 60% της τελικής βαιμολογίας.
  • Η βάση για να περάσει κάποιος το μάθημα είναι 5.
  • Αν ένα μαθητής έχει γράψει λιγότερο από 4 στο τελικό δεν περνάει (ανεξάρτητα από τι έχει γράψει στη πρόοδο)

Γράψτε κώδικα σε R ο οποίος να υπολογίζει πόσοι φοιτητές πέρασαν το μάθημα.

Άσκηση 80

Έστω το παρακάτω data frame:

samples <- data.frame(
  name = unlist(lapply(1:10, function(x) paste('Student', x))),
  mutation = c(TRUE,FALSE,FALSE,FALSE,TRUE,TRUE,FALSE,FALSE,TRUE,FALSE),
  disease = c(TRUE,TRUE,TRUE,FALSE,FALSE,TRUE,TRUE,FALSE,TRUE,FALSE)
)

Κάντε copy-paste αυτές τις εντολές.

Αυτό το data frame περιέχει για κάθε έναν από 10 ανθρώπους την εξής πληροφορία: αν έχει μία μετάλλαξη (mutation) (TRUE/FALSE) και αν έχει μία ασθένεια (disease) (TRUE/FALSE).

Φτιάξτε μία συνάρτηση η οποία να παίρνει ως παράμετρο ένα data frame όπως το samples. H συνάρτηση θα πρέπει να επιστρέφει το πλήθος των ανθρώπων που έχουν τη μετάλλαξη αλλά δεν έχουν την ασθένεια.

Άσκηση 81

Ο παρακάτω κώδικας:

genes <- data.frame(
    name = unlist(lapply(c(1:10), function(x) { return (paste('Gene', x))})),
    start = as.integer(runif(10, 1000, 2000))
   )
genes['end'] <- genes['start'] + as.integer(runif(10, 300, 700))

Παράγει ένα τυχαίο data.frame με το όνομα genes το οποίο περιέχει τις ακόλουθες στήλες:

  • name: το όνομα ενός γονιδίου.
  • start: μία θέση από όπου ξεκινάει
  • end: μία θέση όπου τελειώνει.

Κάντε copy-paste τον παραπάνω κώδικα.

Φτιάξτε μία συνάρτηση η οποία να παίρνει ως παράμετρο έναν data frame αυτού του είδος. Η συνάρτηση θα επιστρέφει ένα νέο data frame το οποία θα είναι το ίδιο με το genes. Απλά θα έχει τις ακόλουθες επιπλέον στήλες:

  • col_1350: Περιέχει TRUE αν το γονίδια έχει τη θέση 1350 (δηλαδή αν η αρχή του είναι μικρότερη ή ίση από το 1350 και το τέλος του μεγαλύτερο ή ίσο από το 1350)
  • col_NOT_1700_1800: Περιέχει TRUE αν το γονίδιο ΔΕΝ έχει τη θέση 1750.

Άσκηση 82

Ο παρακάτω κώδικας:

genes <- data.frame(
    name = unlist(lapply(c(1:10), function(x) { return (paste('Gene', x))})),
    start = as.integer(runif(10, 1000, 2000))
   )
genes['end'] <- genes['start'] + as.integer(runif(10, 300, 700))

Παράγει ένα τυχαίο data.frame με το όνομα genes το οποίο περιέχει τις ακόλουθες στήλες:

  • name: το όνομα ενός γονιδίου.
  • start: μία θέση από όπου ξεκινάει σε ένα γονιδίωμα
  • end: μία θέση όπου τελειώνει σε ένα γονιδίωμα.

Κάντε copy-paste τον παραπάνω κώδικα.

Φτιάξτε μία συνάρτηση η οποία να παίρνει ως παράμετρο έναν data frame αυτού του είδος. Η συνάρτηση θα επιστρέφει ένα νέο data frame το οποία θα είναι το ίδιο με το genes. Απλά θα έχει τις ακόλουθες επιπλέον στήλες:

  • col_1200_1500 Περιέχει το πλήθος των θέσεων του γονιδίου είναι μικρότερες από τη θέση 1350.
  • col_NOT_1700_1800 Περιέχει το πλήθος των θέσεων του γονιδίου που είναι μεγαλύτερες από το 1750.

Άσκηση 83

Η παρακάτω εντολή:

samples <- data.frame(
    name = unlist(lapply(c(1:50), function(x) { return (paste('Sample', x))})),
    weight = runif(50, 55, 100),
    height = round(runif(50, 1.4, 1.9), 2)
   )

Φτιάχνει ένα data frame με τις εξής στήλες:

  • name: Το όνομα ενός ανθρώπου
  • weight: Το βάρος του
  • height: το ύψος του

Κάντε copy-paste τον παραπάνω κώδικα.

Προσθέστε μία νέα στήλη με το όνομα bmi.group. Η τιμή της νέας στήλης θα είναι σύμφωνα μα τον εξής κανόνα:

  • Αν το bmi είναι μικρότερο ή ίσο από 18.5 τότε η τιμή της νέας στήλη είναι: 'underweight'
  • Αν το bmi είναι μεγαλύτερο από 18.5 και μικρότερη ή ίσο από 25.0 τότε η τιμή της νέας στήλης είναι 'normal'
  • Αν τo bmi είναι μεγαλύτερο από 25.0 τότε η τιμ΄γ τηε νέας στήλης είναι: overweight

Θυμμίζουμε ότι το bmni είναι βάρος / ύψος2

Άσκηση 84

Σε αυτό το λινκ:

https://docs.google.com/spreadsheets/d/14kP59eFgCoGh_zlvvtyfQyK58xxgIrTP2wUnZmBG1wY/edit?usp=sharing

Υπάρχει στο Google Sheets το αρχείο με τις βάσεις των πανελληνίων του 2020. Το αρχείο αυτό ΔΕΝ περιέχει ελληνικούς χαρακτήρες. Επίσης για αυτή την άσκηση ΔΕΝ χρειάζεται να το κατεβάσετε. Μπορείτε πολύ εύκολα να το φορτώσετε στην R με τη παρακάτω εντολή:

baseis <- read.csv(url('https://www.dropbox.com/s/v3ztdbznefr7qbr/baseis_gr.csv?dl=1'))
baseis <- baseis[baseis$EIDOS_THESIS == 'GEL GENIKH SEIRA HM. (NEO)',] 

Κάντε copy-paste αυτήν την εντολή.

Αφού φορτώσετε αυτό το αρχείο, γράψτε κώδικα σε R η οποία να απαντάει στο ερώτημα:

Από τις σχολές που οι επιτυχόντες (στήλη: "EPITYXONTES") είναι από 100 εως 130 άτομα, ποια είναι αυτή με τα λιγότερα μόρια εισαγωγής (στήλη: "MORIA");

Hint: Η συνάρτηση which.min επιστρέφει τη θέση του μικρότερου στοιχείου (όχι το μικρότερο)

Άσκηση 85

Σε αυτό το λινκ:

https://docs.google.com/spreadsheets/d/14kP59eFgCoGh_zlvvtyfQyK58xxgIrTP2wUnZmBG1wY/edit?usp=sharing

Υπάρχει στο Google Sheets το αρχείο με τις βάσεις των πανελληνίων του 2020. Το αρχείο αυτό ΔΕΝ περιέχει ελληνικούς χαρακτήρες. Επίσης για αυτή την άσκηση ΔΕΝ χρειάζεται να το κατεβάσετε. Μπορείτε πολύ εύκολα να το φορτώσετε στην R με τη παρακάτω εντολή:

baseis <- read.csv(url('https://www.dropbox.com/s/v3ztdbznefr7qbr/baseis_gr.csv?dl=1'))
baseis <- baseis[baseis$EIDOS_THESIS == 'GEL GENIKH SEIRA HM. (NEO)',] 

Κάντε copy-paste αυτήν την εντολή.

Αφού φορτώσετε αυτό το αρχείο, γράψτε κώδικα σε R ο οποίος να απαντάει στο ερώτημα:

Ποιες από τις σχολές του ιδρύματος του Πανεπιστημίου Κρήτης ("PAN. KRHTHS") έχουν περισσότερα μόρια εισαγωγής (στήλη "MORIA") από το μέσο όρο μορίων εισαγωγής όλων των σχολών του ιδρύματος του Πανεπιστημίου Ιωαννίνων ("PAN. IWANNINWN") ;

Άσκηση 86

Σε αυτό το λινκ:

https://docs.google.com/spreadsheets/d/14kP59eFgCoGh_zlvvtyfQyK58xxgIrTP2wUnZmBG1wY/edit?usp=sharing

Υπάρχει στο Google Sheets το αρχείο με τις βάσεις των πανελληνίων του 2020. Το αρχείο αυτό ΔΕΝ περιέχει ελληνικούς χαρακτήρες. Επίσης για αυτή την άσκηση ΔΕΝ χρειάζεται να το κατεβάσετε. Μπορείτε πολύ εύκολα να το φορτώσετε στην R με τη παρακάτω εντολή:

baseis <- read.csv(url('https://www.dropbox.com/s/v3ztdbznefr7qbr/baseis_gr.csv?dl=1'))
baseis <- baseis[baseis$EIDOS_THESIS == 'GEL GENIKH SEIRA HM. (NEO)',] 

Κάντε copy-paste αυτήν την εντολή.

Στη συνέχεια προσθέστε στο data frame baseis τη στήλη με το όνομα "POSOSTO" η οποία περιέχει το ποσοστό των επιτυχόντων ως προς το συνολικό αριθμό όλων των επιτυχόντων.

Άσκηση 87

Σε αυτό το λινκ:

https://docs.google.com/spreadsheets/d/14kP59eFgCoGh_zlvvtyfQyK58xxgIrTP2wUnZmBG1wY/edit?usp=sharing

Υπάρχει στο Google Sheets το αρχείο με τις βάσεις των πανελληνίων του 2020. Το αρχείο αυτό ΔΕΝ περιέχει ελληνικούς χαρακτήρες. Επίσης για αυτή την άσκηση ΔΕΝ χρειάζεται να το κατεβάσετε. Μπορείτε πολύ εύκολα να το φορτώσετε στην R με τη παρακάτω εντολή:

baseis <- read.csv(url('https://www.dropbox.com/s/v3ztdbznefr7qbr/baseis_gr.csv?dl=1'))
baseis <- baseis[baseis$EIDOS_THESIS == 'GEL GENIKH SEIRA HM. (NEO)',]

Κάντε copy-paste αυτήν την εντολή.

Γράψτε κώδικα σε R ο οποίος παράγει ένα matrix το οποίο θα έχει τόσες γραμμές ώσες τα διαφορετικά ιδρύματα (στήλη: "IDRYMA") και έχει 2 στήλες.

  • Η 1η στήλη περιέχει το πλήθος από σχολές του αντίστοιχου ιδρύματος
  • Η 2η στήλη περιέχει το άθροισμα από εισαχθέντες για το αντίστοιχο ίδρυμα

Άσκηση 88

Σε αυτό το λινκ:

https://docs.google.com/spreadsheets/d/14kP59eFgCoGh_zlvvtyfQyK58xxgIrTP2wUnZmBG1wY/edit?usp=sharing

Υπάρχει στο Google Sheets το αρχείο με τις βάσεις των πανελληνίων του 2020. Το αρχείο αυτό ΔΕΝ περιέχει ελληνικούς χαρακτήρες. Επίσης για αυτή την άσκηση ΔΕΝ χρειάζεται να το κατεβάσετε. Μπορείτε πολύ εύκολα να το φορτώσετε στην R με τη παρακάτω εντολή:

baseis <- read.csv(url('https://www.dropbox.com/s/v3ztdbznefr7qbr/baseis_gr.csv?dl=1'))
baseis <- baseis[baseis$EIDOS_THESIS == 'GEL GENIKH SEIRA HM. (NEO)',]

Κάντε copy-paste αυτήν την εντολή.

Αφού φορτώσετε αυτό το αρχείο, γράψτε κώδικα σε R ο οποίος να απαντάει στο ερώτημα:

Ποιο είναι το άθροισμα των επιτυχόντων (στήλη: "EPITYXONTES") των σχολών που το όνομά τους (στήλη: "ONOMA_SXOLHS") περιέχει το αλφαριθμητικό BIOL;

Δίνεται ότι η συνάρτηση grepl(a, b) ελέγχει αν το αλφαριθμητικό a υπάρχει στο b.

Plots (γραφικές παραστάσεις)

Άσκηση 89

Ένας φοιτητής πέτυχε τους ακόλουθους βαθμούς στο πρώτο εξάμηνο ενός τμήματος βιολογίας:

Zoologia: 7
Fysikh: 8
Ypologistes: 9
Xhmeia: 6

Φτιάξτε ένα barplot (ραβδόγραμμα) με αυτούς τους βαθμούς.

Άσκηση 90

Ένας φοιτητής πέτυχε τους ακόλουθους βαθμούς στο πρώτο εξάμηνο ενός τμήματος βιολογίας (σε πρόοδο και τελικό):

              Proodos    Teliko
Zoologia:      7            6
Fysikh:        8            5
Ypologistes:   9            6
Xhmeia:        6            4

Φτιάξτε ένα barplot (ραβδόγραμμα) όπου η κάθε "μπάρα" θα είναι ένα μάθημα. Η κάθε μπάρα θα έχει δύο σκιάσεις. Η πρώτη θα δείχνει τον βαθμό της προόδου και η δεύτερη θα δείχνει τον βαθμό του τελικού.

Άσκηση 91

Ένας φοιτητής πέτυχε τους ακόλουθους βαθμούς στο πρώτο εξάμηνο ενός τμήματος βιολογίας (σε πρόοδο και τελικό):

              Proodos    Teliko
Zoologia:      7            6
Fysikh:        8            5
Ypologistes:   9            6
Xhmeia:        6            4

Φτιάξτε ένα barplot (ραβδόγραμμα) όπου το κάθε μάθημα θα φαίνεται σαν 2 μπάρες. Η πρώτη θα δείχνει τον βαθμό της προόδου και η δεύτερη θα δείχνει τον βαθμό του τελικού.

Άσκηση 92

Ένας φοιτητής πέτυχε τους ακόλουθους βαθμούς στο πρώτο εξάμηνο ενός τμήματος βιολογίας (σε πρόοδο και τελικό):

              Proodos    Teliko
Zoologia:      7            6
Fysikh:        8            5
Ypologistes:   9            6
Xhmeia:        6            4

Αν ο τελικός βαθμός υπολογίζεται ως 40% ο βαθμός της προόδου και 60% ο βαθμός του τελικού, φτιάξτε ένα barplot (ραβδόγραμμα) με τους τελικούς βαθμούς κάθε μαθήματος.

Άσκηση 93

Φτιάξτε μια γραφική παράσταση της συνάρτησης f(x)=x44 - 5x3 + 3x2 + 7x +1 για x από -2 μέχρι 4. Χρησιμοποιήστε βήμα 0.01

hint:

seq(0, 1, by=0.01) # επιστρέφει ένα διάνυσμα από 0 μέχρι και 1 με βήμα 0.01

Άσκηση 94

Φτιάξτε ένα plot το οποίο να έχει μαζί:

  1. Τη γραφική παράσταση της συνάρτησης f(x) = sin(x)
  2. Τη γραφική παράσταση της συνάρτησης f(x) = sin(x + π/2)

Πάρτε τιμές του χ από το -3 μέχρι το 3 με βήμα 0.01

hint:

seq(0, 1, by=0.01) # επιστρέφει ένα διάνυσμα από 0 μέχρι και 1 με βήμα 0.01

Δίνεται ότι το π (3.14...) είναι στην R: pi.

Άσκηση 95

Φτιάξτε μια γραφική παράσταση χρησιμοποιώντας γραμμές. Οι γραμμές πρέπει να είναι έτσι ώστε να φαίνεται (στο περίπου) το γράμμα "N".

Η γραφική παράστασή σας θα πρέπει να είναι κάπως έτσι:

img

Άσκηση 96

To παρακάτω data frame περιέχει τους μέσους όρους για 8 εξάμηνα για δύο φοιτητές, τη Maria και τον Kostas:

grades <- data.frame(
    semester.1 = c(6  , 7),
    semester.2 = c(6.2, 7.4),
    semester.3 = c(  7, 7.6),
    semester.4 = c(7.3, 8),
    semester.5 = c(  8, 8.2),
    semester.6 = c(7.6, 8.4),
    semester.7 = c(7.8, 7.9),
    semester.8 = c(  8, 8.3),
    row.names = c('Maria', 'Kostas')
)

Φτιάξτε ένα plot το οποίο να έχει δύο γραμμές.

  • Η πρώτη γραμμή θα δείχνει τη διακύμανση της βαθμολογίας για τη Maria χρησιμοποιώντας χρώμα κόκκινο (red)
  • Η δεύτερη γραμή θα δείχνει τη διακύμανση της βαθμολογίας για τον Kostas χρησιμοποιώντας χρώμα μπλε (blue).

Το γράφημά σας θα πρέπει να είναι κάπως έτσι:

img

Άσκηση 97

Το παρακάτω data frame περιέχει τους βαθμούς που πέτυχε ένας φοιτητής στα 3 κύρια μαθήματα σε κάθε ένα από τα 8 εξαμήνου μίας σχολής:

grades <- data.frame(
    semester.1 = c(6  , 7, 5.1),
    semester.2 = c(6.2, 7.4, 6.5),
    semester.3 = c(  7, 7.6, 6.6),
    semester.4 = c(7.3, 8, 6.7),
    semester.5 = c(  8, 8.2, 7.2),
    semester.6 = c(7.6, 8.4, 7.8),
    semester.7 = c(7.8, 7.9, 6.5),
    semester.8 = c(  8, 8.3, 6.9),
    row.names = c('lesson.1', 'lesson.2', 'lesson.3')
)
  • Υπολογίστε τον μέσο όρο των βαθμών του για κάθε εξάμηνο.
  • Φτιάξτε ένα plot το οποίο θα δείχνει πως κυμάνθηκε αυτός ο μέσος όρος.

Το γράφημα θα πρέπει να είναι κάπως έτσι:

img

Άσκηση 98

Τρέχοντας το παρακάτω κομμάτι κώδικα δημιουργείται ένα data frame 50 γραμμών μς τις παρακάτω στήλεςς:

  • Η στήλη gender περιέχει το φύλο (female, male)
  • Η στήλη age περιέχει την ηλικία
  • η στήλη disease περιέχει TRUE σε αυτούς που εχουν μία ασθένεια και FALSE σε αυτούς που δεν την έχουν.
samples <- data.frame(
    gender =  sample(c('female', 'male'), size = 50, replace = TRUE),
    age = as.integer(runif(n = 50, min = 20, max = 60)),
    disease = sample(c(TRUE, FALSE), size = 50, replace = TRUE)
)

Φτιαξτε ενα barplot που να έχει 2 μπάρες. Κάθε μπάρα θα εκπροσωπεί και ένα φύλο. Κάθε μπάρα θα έχει δύο σκιάσεις: μία που θα δείχνει το πλήθος αυτών που έχουν την ασθένεια (disease) και μία το πλήθος αυτών που δεν την έχουν.

Το πλοτ θα πρέπει να είναι κάπως έτσι: img

  • ΠΡΟΣΟΧΗ Αυτό είναι ένα plot για τα τυχαία δεδομένα που παρήγαγε σε εμένα. Το δικό σας ίσως να διαφέρει λίγο.
  • Σημείωση: Βάλτε στο μέιλ με τις απαντήσεις σας ΜΟΝΟ τον κώδικα που παράγει το γράφημα. Όχι το ίδιο το γράφημα.

Άσκηση 99

Το παρακάτω data frame περιέχει τους βαθμούς που πέτυχε ένας φοιτητής στα 3 κύρια μαθήματα σε κάθε ένα από τα 8 εξαμήνου μίας σχολής:

grades <- data.frame(
    semester.1 = c(6  , 7, 5.1),
    semester.2 = c(6.2, 7.4, 6.5),
    semester.3 = c(  7, 7.6, 6.6),
    semester.4 = c(7.3, 8, 6.7),
    semester.5 = c(  8, 8.2, 7.2),
    semester.6 = c(7.6, 8.4, 7.8),
    semester.7 = c(7.8, 7.9, 6.5),
    semester.8 = c(  8, 8.3, 6.9),
    row.names = c('lesson.1', 'lesson.2', 'lesson.3')
)

Φτιάξτε ένα barplot το οποίο θα έχεις τόσες ράβδους (μπάρες), ώσες και τα τρίμηνα. Κάθε ράβδος θα έχει 3 σκιάσεις μία για κάθε μάθημα. Το πλοτ θα πρέπει να είναι κάπως έτσι:

img

Άσκηση 100

  • Φτιάξτε ένα διάνυσμα με το όνομα a με 100 τυχαίες τιμές από το -1 μέχρι το 1
  • Φτιάξτε ένα διάνυσμα με το όνομα b με 100 τυχαίες τιμές από το -1 μέχρι το 1
  • Φτιάξτε ένα scatter plot (συζευγμένα δεδομένα) με τα σημεία που ορίζονται στο επίπεδο όπου X=a και Y=b. Δηλαδή το scatter plot θα δείχνει πως κατανέμονται στον χώρο τα 100 τυχαία σημεία που φτιάξατε.

Το σημεία που απέχουν απόσταση μικρότερη ή ίση με 1 από το κέντρο (0,0) των αξόνων πρέπει να είναι κόκκινα. Το σημεία που απέχουν απόσταση μεγαλύτερη από 1 από το κέντρο (0,0) των αξόνων πρέπει να είναι μπλε.

Η απόσταση ενός σημείου x,y από την αρχή των αξόνων δίνεται από την εξίσωση:

d = sqrt( x2 + y2 )

Το πλοτ θα πρέπει να είναι κάπως έτσι: img

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment