Skip to content

Instantly share code, notes, and snippets.

@kantale
Last active January 28, 2021 13:22
Show Gist options
  • Save kantale/ff6179b97efc32153080097756280b7e to your computer and use it in GitHub Desktop.
Save kantale/ff6179b97efc32153080097756280b7e to your computer and use it in GitHub Desktop.

Υπολογισμός των ασκήσεων που θα λύσετε:

Τρέξτε τη παρακάτω συνάρτηση, βάζοντας σαν παράμετρο τον αριθμό μητρώου σας:

get.askhseis <- function(AM) {
    if_else <- c(1:10)
    for_while <- c(11:23)
    if_else_for_while <- c(if_else, for_while)
    
    vectors <- c(24:39)
    lists <- c(40:56)
    matrices <- c(57:72)
    vectors_lists_matrices <- c(vectors, lists, matrices)
    
    data_frames <- c(73:88)
    plots <- c(89:100)
    data_frames_plots <- c(data_frames, plots)
    
    set.seed(AM)
    
    askhseis <- c()
    askhseis <- c(askhseis, sample(if_else, 1))
    askhseis <- c(askhseis, sample(for_while, 1))
    askhseis <- c(askhseis, sample(vectors, 1))
    askhseis <- c(askhseis, sample(lists, 1))
    askhseis <- c(askhseis, sample(matrices, 1))
    askhseis <- c(askhseis, sample(data_frames, 1))
    askhseis <- c(askhseis, sample(plots, 1))
    
    for (extra in list(if_else_for_while, vectors_lists_matrices, data_frames_plots)) {
        while (TRUE) {
            n <- sample(extra, 1)
            if (! n %in% askhseis) {
                break
            }
        }
        askhseis <- c(askhseis, n)
    }
    
    askhseis <- sort(askhseis)
    
    return (askhseis)
}

Για παράδειγμα, αν ο αριθμός μητρώου σας είναι 100:

get.askhseis(100)

# Επιστρέφει:
10 , 14 , 17 , 29 , 55 , 59 , 67 , 81 , 95 , 98

Ασκήσεις

Αυτές είναι και οι ασκήσεις που πρέπει να λύσετε.

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

Άσκηση 1

Σε μία διοργάνωση τέννις, ένα σετ το κερδίζει όταν ένας παίκτης πάρει 6 games. Αν το σκορ φτάσει 5-5 τότε το όριο αυτό φτάνει τα 7 games. Αν όμως το σκορ φτάσει 6-6 τότε ακολουθεί ένα ιδαίτερο scoring system το οποίο λέγεται tie break. Σε αυτό, με κάθε "μπάλα" που κερδίζει ένας παίκτης παίρνει 1 πόντο (σε αντίθεση με το σύστημα 0-15-30-40 που ισχύει στα υπόλοιπα games). Όταν ένας από τους δύο παίκτες φτάσει τους 7 πόντους, αν ο δεύτερος έχει 5 πόντους ή λιγότερους, τότε λήγει το σετ και το κερδίζει ο παίκτης με τους 7 πόντους. Αν όμως ο δεύτερος παίκτης έχει 6 πόντους τότε το παιχνίδι συνεχίζεται μέχρι η διαφορά των πόντων να γίνει 2.

Γράψτε μία συνάρτηση η οποία θα παίρνει 2 παραμέτρους: τις player_1 και player_2 οι οποίοι θα περιέχουν τους πόντους του πρώτου και του δεύτερου παίκτη αντίστοιχα. Η συνάρτηση θα υποθέτει ότι βρισκόμαστε σε ένα tie break. Η συνάρτηση θα επιστρέφει "1st player wins" ή "2nd player wins" ή "game goes on" ή "impossible" ανάλογα με τις τιμές των μεταβλητών player_1 και player_2 . Δείτε τα παραδείγματα:

player_1=1
player_2=4
f(player_1, player_2) # Epistrefei: "game goes on"

player_1=7
player_2=2
f(player_1, player_2) # Epistrefei: "1st player wins"

player_1=6
player_2=7
f(player_1, player_2) # Epistrefei: "game goes on"

player_1=6
player_2=8
f(player_1, player_2) # Epistrefei: "2nd player wins"

player_1 = 3
player_2 = 8
f(player_1, player_2) # Epistrefei: "impossible"

player_1 = 8
player_2 = 11
f(player_1, player_2) # Epistrefei: "impossible"

player_1 = 23
player_2 = 24
f(player_1, player_2) # Epistrefei: "game goes on"

Άσκηση 2

Σε ένα φορολογικό σύστημα ισχύει το εξής:

  • Τα πρώτα 10.000 ευρώ δεν φορολογούνται
  • Τα υπόλοιπα και μέχρι και τα 20.000 ευρώ φορολογούνται με φόρο 15%
  • Τα υπόλοιπα και μέχρι και τα 40.000 ευρώ φορολογούνται με φόρο 20%
  • Τα υπόλοιπα και μέχρι και τα 60.000 ευρώ φορολογούνται με φόρο 30%
  • Τα υπόλοιπα (>60.000 ευρώ) φορολογούνται με φόρο 40%

Γράψτε μία συνάρτηση η οποία θα παίρνει σαν παράμετρο τη μεταλητή income η οποία θα αναπαριστάει το εισόδημα ενός φορολογούμενου. Συνάρτηση θα επιτρέφει τη φορολογία που αναλογεί στον φορολογούμενο.

Παραδείγματα:

f(5000)  # Epistrefei: 0
f(15000) # Epistrefei: 750.0  
f(30000) # Epistrefei: 3500.0
f(50000) # Epistrefei: 8500.0
f(70000) # Epistrefei: 15500.0

Άσκηση 3

Έστω η ένα διάνυσμα το οποίο περιέχει τρεις ακέραιες τιμές. Η πρώτη έχει το όνομα hours και περιέχει ώρες, η δεύτερη έχει το όνομα minutes και περιέχει λεπτά και η τρίτη έχει το όνομα seconds και περιέχει δευτερόλεπτα. Π.χ:

t <- c(hours=15, minutes=45, seconds=51)

Φτιάξτε μία συνάρτηση με το όνομο convert.to.seconds η οποία θα παίρνει ως παράμετρο ένα διάνυσμα όπως περιγράφεται πιο πάνω και θα επιστρέφει το χρονικό διάστημα που περιέχει σε δευτερόλεπτα. Για το παράδειγμα που δόθηκε, το χρονικά διάστημα του t σε δευτερόλεπτα είναι 56751.

Άσκηση 4

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

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

f(1)    # Epistrefei: "Trith"
f(3)    # Epistrefei: "Pempth"
f(7)    # Epistrefei: "Deutera"
f(1000) # Epistrefei: "Kuriakh"

Άσκηση 5

Φτιάξτε μία συνάρτηση η οποία θα παίρνει 2 παραμέτρους a,b οι οποίοι θα είναι αριθμοί. Η συνάρτηση θα πρέπει να λύνει την εξίσωση: ax+b=0 με τον εξής τρόπο:

  • Αν το a είναι 0:
    • Αν το b είναι 0 επιστρέφει: "TAYTOTHTA"
    • Αν το b δεν είναι 0 επιστρέφει: "ADYNATH"
  • Α το a δεν είναι 0: Επιστρέφει -b/a

Άσκηση 6

Φτιάξτε μία συνάρτηση η οποία θα παίρνει ως είσοδο ένα αλφαριθμητικό το οποίο θα είναι μία ακολουθία νουκλεοτιδίων. Π.χ. μία πιθανή κλήση της συνάρτηση είναι με την τιμή: 'AAACGTTCGGAA'. Η συνάρτηση θα πρέπει να επιστρέφει TRUE αν η ακολουθία ΔΕΝ περιέχει άλλο γράμμα πέρα από τα 'A', 'C', 'G', 'T'. Για παράδειγμα αν η είσοδος είναι 'ACCGGFT', τότε επιστρέφει FALSE. Αν η ακολουθία είναι η 'ACCCAA', τότε επιστρέφει TRUE. Αν η ακολουθία είναι κενή τότε πρέπει να επιστρέφει FALSE.

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

Άσκηση 7

Γράψτε μία συνάρτηση η οποία θα παίρνει δύο ακέραιους ως παράμετρους. Ο πρώτος μπορεί να πάρει τιμές από το 1 μέχρι το 31 και αναπαριστά τη μέρα του μήνα. Ο δεύτερος μπορεί να πάρει τιμές από 1 μέχρι το 12 και αναπαριστά τον μήνα του χρόνου (1=Ιανουάριος, 2=Φεβρουάριους, ... 12=Δεκέμβριους). Η συνάρτηση θα πρέπει να επιστρέφει TRUE, αν είναι δυνατός αυτός ο συνδοιασμός (μέρα, μήνα), διαφορετικά θα επιστρέφει FALSE. Σημείωση: υποθέτουμε ότι το έτος ΔΕΝ είναι δίσεκτο. Παραδείγματα:

f(31,1) # (31 January) Epistrefei  TRUE 
f(29,2) # (29 February) Epistrefei  FALSE 
f(32,3) # (32 March)    Epistrefei  FALSE  
f(31,4) # (31 April)    Epistrefei  FALSE 
f(31,5) # (31 May)      Epistrefei  TRUE 

Άσκηση 8

Γράψτε μία συνάρτηση η οποία θα παίρνει ως παράμετρο δύο αριθμούς x και y. Το πρόγραμμα θα επιστρέφει σε πιο τεταρτημόριο του καρτεσιανού διδιάστατου χώρου βρίσκεται το σημείο που ορίζεται από αυτούς τους δύο αριθμούς. Αν το σημείο "πέφτει" πάνω σε κάποιον άξονα ή στο κέντρο των αξόνων (σημείο 0,0) θα επιτρέφει ένα ανάλογο αλφαριθμητικό. Θεωρούμε ότι το κέντρο του χώρου είναι το 0,0. Για παράδειγμα:

f(3,4)   # Epistrefei "1o tetarthmorio"
f(-2,7)  # Epistrefei "2o tetarthmorio"
f(-5,-2) # Epistrefei "3o tetarthmorio" 
f(4,-3)  # Epistrefei "4o tetarthmorio"
f(0,0)   # Epistrefei "kentro"
f(0,1)   # Epistrefei "axonas Y"
f(3,0)   # Epistrefei "axonas X"

Άσκηση 9

Για τη μετατροπή από Fahrenheit σε Celsius χρησιμοποιείται η παρακάτω φόρμουλα: C = (F − 32) * (5/9)

Για τη μετατροπή από Celsius σε Kelvin χρησιμοποιείται η παρακάτω φόρμουλα: K = C + 273.15

Φτιάξτε μία συνάρτηση F_to_C η οποία θα δέχεται μία θερμοκρασία σε Fahrenheit και θα επιστρέφει την αντίστοιχη σε Celsius.

Φτιιάξτε μία συνάρτηση C_to_K η οποία θα δέχεται μία θερμοκρασία σε Celsius και θα επιστρέφει την αντίστοιχη σε Kelvin.

Φτιάξτε μία συνάρτηση F_to_K η οποία θα δέχεται μία θερμοκρασία σε Fahrenheit και θα επιστρέφει την αντίστοιχη σε Kelvin. Σε αυτή τη συνάρτηση είναι υποχρεωτικό να χρησιμοποιήσετε τις συναρτήσεις F_to_C και C_to_K.

Άσκηση 10

Φτιάξτε μία συνάρτηση η οποία θα παίρνει τρεις παραμέτρους a,b,c. Η συνάρτηση θα επιστρέφει τη λύση της εξίσωσης ax2 + bx + c = 0. Με τον εξής τρόπο:

  • Αν το a είναι 0 επιτρέφει: NULL
  • Διαφορετικά:
    • Υπολογίζει τη διακρίνουσα: D = b2-4ac
    • Αν η διακρίνουσα είναι αρνητική, η συνάρτηση θα επιστρέφει NULL
    • Αν η διακρίνουσα είναι 0.0 τότε η συνάρτηση θα επιτρέφει τη μία λύση της εξίσωσης δηλαδή: -b/(2a)
    • Αν η διακρίνουσα είναι μεγαλύτερη από το 0.0 τότε η συνάρτηση θα επιστρέφει ένα διάνυσμα με τις δύο λύσεις της εξίσωσης. Δηλαδή: (-b+sqrt(D))/(2*a) και (-b-sqrt(D))/(2*a)

Η συνάρτηση sqrt(x) υπολογίζει τη τετραγωνική ρίζα του x.

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

Άσκηση 11

Αν αθροίσουμε όλους τους αριθμούς που διαιρούνται με το 9 αλλά δεν διαιρούνται με το 5, σε ποιον αριθμό το άθροισμα αυτό θα ξεπεράσει το 2000;

Άσκηση 12

Ποιο είναι το άθροισμα όλων των αριθμών που διαιρούνται με 9 αλλά δεν διαιρούνται με 5 από το 1000 μέχρι και το 2000;

Άσκηση 13

Το παραγοντικό ενός αριθμούς το υπολογίζουμε με τη συνάρτηση της R factorial(N). Βρείτε και τυπώστε όλους τους ακέραιους αριθμούς Α,Β,Γ οι οποίοι είναι μεγαλύτεροι από το 1 (μην παρετε το 1) και μικρότεροι από το 100 για τους οποίους ισχύει:

Α! = Β! * Γ!

Το παραγοντικό ενός αριθμού Ν συμβολίζεται με N! και είναι το γινόμενο: 1*2*3*...*Ν

Άσκηση 14

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

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

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

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

Άσκηση 15

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

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

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

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

Άσκηση 16

Αν αρχίσουμε να αθροίζουμε τις τετραγωνικές ρίζες όλων των αριθμών ξεκινώντας από το 1, σε ποιον αριθμό το άθροισμα αυτό θα ξεπεράσει το 1000;

Άσκηση 17

Υπολογίστε το άθροισμα:

img

Πρόκειτα για το άθροισμα της τιμής: ((-1)n)/(2n+1) , για όλες τις τιμές του n από το 0 μέχρι και το 100.

Άσκηση 18

Φτιάξτε τη συνάρτηση με το όνομα f η οποία παίρνει ως παράμετρο 2 αριθμούς: i,j. Η συνάρτηση θα πρέπει να επιστρέφει: (i+j)/(i*j)

Φτιάξτε τη συνάρτηση με το όνομα g η οποία θα παίρνει ως παράμετρο 1 ακέραιο θετικό αριθμό N μικρότερο ή ίσο με το 100. Η συνάρτηση θα επιστρέφει το άθροισμα: f(1,1) + f(1,2) + f(1,3) + ... + f(1,Ν)

Υπολογίστε το άθροισμα: g(1) + g(2) + ... + g(100)

Άσκηση 19

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

(α+β)^2 = α*10 + β

Γράψτε κώδικα σε R που να απαντάει σε αυτό το ερώτημα με επαναληπτικό τρόπο. Δηλαδή να δοκιμάζει όλες τις πιθανές τιμές των α και β.

Άσκηση 20

Αν μία μπάλα χάνει το 7% του ύψους της κάθε φορά που αναπηδάει και την αφήσουμε να πέσει από το 1 μέτρο, μετά από πόσες αναπηδήσεις θα έχει φτάσει σε ύψος κάτω από το μισό μέτρο; Φτάξτε κώδικα R που απαντάει σε αυτό το ερώτημα με επαναληπτικό τρόπο.

Άσκηση 21

Γράψτε κώδικα σε R ο οποίο θα τυπώνει τα x και τα y με όλες τις λύσεις της εξίσωσης: x^2 = y! + 1 για 1<=x<=20 και 1<=y<=20. Όπου x και y είναι ακέραιοι. Το y! είναι το παραγοντικό και υπολογίζεται με: factorial(y).

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

Άσκηση 22

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

f(x) = 2*ημ(x) - x + 3

παίρνει το μέγιστό της; Πάρτε όλες τις τιμές του x από το -1 μέχρι το 3 με βήμα 0.01.

Δίνεται ότι το ημίτονο είναι το sin(x).

hint:

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

Άσκηση 23

Έστω η συνάρτηση:

f(x)=x5-3x4+7x2-4x-3

Για ποια τιμή του x από το 0 μέχρι και το 2 με βήμα 0.01 είναι πιο κοντά στο 0 η f(x) ;

hint:

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

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

Άσκηση 24

Φτιάξτε μά συνάρτηση που θα παίρνει ως παράμετρο δύο διανύσματα A και B. Η συνάρτηση θα επιστρέφει ένα νέο διάνυσμα το οποίο θα περιέχει τα στοιχεία που υπάρχουν στο 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,7,8,9,10

Άσκηση 25

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

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

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

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

Άσκηση 26

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

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

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

Άσκηση 27

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

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

a<-c(5,5,4,3)
f(a) # Επιστρέφει 5

Άσκηση 28

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

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

a <- c(4,3,5,6)
f(a) # Επιστρέφει 5

Άσκηση 29

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

  • TRUE : Αν το πλήθος το θετικών είναι μεγαλύτερο ή ίσο από το πλήθος των αρνητικών τιμών του διανύσματος
  • FALSE : Αν το πλήθος των θετικών είναι μικρότερο από το πλήθος από των αρνητικών τιμών του διανύσματος

σημείωση: Θεωρήστε ότι το 0 είναι θετικός αριθμός.

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

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

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

a <- c(0,1,-1,-2)
f(a) # Επιστρέφει TRUE

Άσκηση 30

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

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

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

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

Άσκηση 31

Έστω ένα διάνυσμα το οποίο αποτελείται από αλφαριθμητικά. Το κάθε αλφαριθμητικό μπορεί να είναι είτε "kouneli" είτε "kota". Φτιάξτε μία συνάρτηση που θα παίρνει σαν παράμετρο ένα τέτοιο διάνυσμα και θα επιστρέφει το πλήθος από πόδια που έχουν τα ζώα στο διάνυσμα (το kouneli έχει 4 πόδια και η kota έχει 2).

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

a <- c('kouneli', 'kouneli', 'kouneli', 'kota')
f(a) # Επιστρέφει 14 

a <- c('kota', 'kota', 'kouneli')
f(a) # Επιστρέφει 8 

Άσκηση 32

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

  • Επιτρέφει TRUE αν το πλήθος των μονών στοιχείων που έχει το διάνυσμα είναι μονός
  • Επιτρέφει FALSE αν το πλήθος των μονών στοιχείων που έχει το διάνυσμα είναι άρτιος (ζυγός)

Άσκηση 33

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

all(b[a<b] == a[a>b])

Δίνεται ότι η συνάρτηση all(x) επιτρέφει TRUE αν όλα τα στοιχεία του διανύσματος x είναι TRUE. Διαφορετικα (αν έστω και ένα στοιχείο του x είναι FALSE), επιστρέφει FALSE.

Άσκηση 34

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

Άσκηση 35

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

a <- c(17,10,5,13,17,13,4,8,1,6)
f(a) # Επιστρέφει το 10

# Εξήγηση:
# Ο μέσος όρος του a είναι 9.4
# Το στοιχείο του a που έχει τη μικρότερη απόλυτη διαφορά με το 9.4 είναι το 10.

Άσκηση 36

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

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

f(ages, weights)  # Επιστρέφει 70
# Εξήγηση: Το μικρότερο βάρος (61) το έχει το τρίτο στοιχείο. Η τιμή του τρίτου στοιχείου στο ages είναι 70. 

Άσκηση 37

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

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

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

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

Άσκηση 38

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

Άσκηση 39

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

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

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

Πίνακες (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 --> TRUE


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

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

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

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

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

Hint: Google is your friend

Άσκηση 41

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

Παράδειγμα: Έστω

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

Επιστρέφει: 1+3+5+6+1+1+2+4+5+4=32

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

Άσκηση 42

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

Έστω:

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

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

1η γραμμή: 1+3+5+6 = 15
2η γραμμή: 4+2+3+1 = 10
3η γραμμή: 5+4+2+1 = 12

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

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

Άσκηση 43

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

Έστω:

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

Τα στοιχεία που ανήκουν στην περίμετρο είναι:

1 3 5 6
4 - - 1
5 4 2 1

Τα στοιχεία που ΔΕΝ ανήκουν στην περίμετρο είναι:

a = 
- - - - 
- 2 3 -
- - - - 

Το άθροισμα των στοιχείων που ΔΕΝ ανήκουν στη περίμετρο είναι: 2+3=5. Άρα η συνάρτηση θα πρέπει να επιστρέφει: 5

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

Άσκηση 44

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

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

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

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

1 0 0 0
0 2 0 0
0 0 2 0
0 0 0 8

Άσκηση 45

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

Παράδειγμα:

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

Το πλήθος των "1" σε κάθε γραμμή είναι:

a = 
0 1 0 0  --> 1 (μονός)
1 1 0 1  --> 3 (μονός)
0 0 1 1  --> 2 (ζυγός)
0 0 0 1  --> 1 (μονός)

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

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

a = 
0 1 0 0  --> 1 (μονός)
1 1 0 1  --> 3 (μονός)
0 0 1 0  --> 1 (μονός)
0 0 0 1  --> 1 (μονός)

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

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

Άσκηση 46

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

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

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

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


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


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

Άσκηση 47

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

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

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

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

Άσκηση 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

Φτιάξτε μία συνάρτηση η οποία θα παίρνει ως παράμετρο έναν πίνακα A. Η συνάρτηση θα επιστρέφει έναν νέο πίνακα 2Χ2 ο οποίος θα "περιέχει" μόνο τα γωνιακά στοιχεία του πίνακα A.

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

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

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

3 5
2 8

Δηλαδή έναν πίνακα που περιέχει τα πάνω αριστερά, πάνω δεξιά, κάτω αριστερά και κάτω δεξιά στοιχεία του A.

Άσκηση 50

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

1 4 6
5 4 2
9 8 1

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

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

Η κύρια διαγώνιος ΔΕΝ είναι μεγαλύτερη από τη διαγώνιο οπότε επιτρέφει: FALSE

Άσκηση 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

Επιστρέφει:

3 3 5
5 6 8
8 6 7

Άσκηση 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

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

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

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

Άσκηση 54

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

Άσκηση 55

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

Άσκηση 56

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

Λίστες

Άσκηση 57

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

Άσκηση 58

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

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

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

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

Άσκηση 59

Έστω μία λίστα η οποία περιέχει 2 στοιχεία: Το στοιχείο με το όνομα weight το οποίο περέχει το βάρους ενός ανθρώπου και το στοιχείο με το όνομα height το οποίο περιέχει το ύψος του. Για παράδειγμα:

a <- list(weight=70, height=1.7)

Φτιάξτε μία συνάρτηση η οποία θα παίρνει σαν παράμετρο μία λίστα με αυτά τα πεδία. Η συνάρτηση θα επιστρέφει TRUE αν το BMI (Body Mass Index) του ανθρώπου είναι μεγαλύτερο ή ίσο με 25 ή FALSE αν είναι μικρότερο από 25. Δίνεται ότι το BMI είναι βάρος / (ύψος2)

Άσκηση 60

Μία εταιρία έχει 10 εργαζόμενους. Η εταιρεία διατηρεί μία λίστα με 10 στοιχεία, ένα για κάθε εργαζόμενο. Κάθε στοιχείο είναι μία λίστα η οποία περιέχει 3 πεδία:

  • Το πεδίο με το όνομα name το οποίο περιέχει το όνομα του εργαζόμενου
  • Το πεδίο με το όνομα age το οποίο περιέχει την ηλικία του εργαζόμενου (σε χρόνια)
  • Το πεδίο με το όνομα salary το οποίο περιέχει τον μισθό του εργαζόμενου.

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

  • Το πεδίο με το όνομα: average.age το οποίο θα περιέχει τον μέσο όρο ηλικίας όλων των εργαζομένων
  • Το πεδίο με το όνομα: average.salary το οποίο θα περιέχει τον μέσο όρο του μισθού όλων των εργαζόμενων.

Μπορείτε να τεστάρετε τη συνάρτησή σας με αυτή τη λίστα:

a<-list(
    list(name="a", age=30, salary=100),
    list(name="b", age=40, salary=200),
    list(name="c", age=50, salary=300),
    list(name="d", age=60, salary=400),
    list(name="e", age=70, salary=500),
    list(name="f", age=80, salary=600),
    list(name="g", age=90, salary=700),
    list(name="h", age=100, salary=800),
    list(name="i", age=110, salary=900),
    list(name="j", age=120, salary=1000)
)

Άσκηση 61

Μία εταιρία έχει 10 εργαζόμενους. Η εταιρεία διατηρεί μία λίστα με 10 στοιχεία. Κάθε στοιχείο είναι μία λίστα η οποία περιέχει 2 πεδία:

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

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

  • Το πεδίο με το όνομα min.name το οποίο θα περιέχει το όνομα του εργαζομένου με τον μικρότερο μισθό.
  • Το πεδίο με το όνομα max.name το οποίο θα περιέχει το όνομα του εργαζομένου με τον μεγαλύτερο μισθό.

Μπορείτε να τεστάρετε τη συνάρτησή σας με αυτή τη λίστα:

a<-list(
    list(name="a",  salary=100),
    list(name="b",  salary=200),
    list(name="c",  salary=300),
    list(name="d",  salary=400),
    list(name="e",  salary=500),
    list(name="f",  salary=600),
    list(name="g",  salary=700),
    list(name="h",  salary=800),
    list(name="i",  salary=900),
    list(name="j",  salary=1000)
)

Άσκηση 62

Μία εταιρία έχει 10 εργαζόμενους. Η εταιρεία διατηρεί μία λίστα με 10 στοιχεία. Κάθε στοιχείο είναι μία λίστα η οποία περιέχει 2 πεδία:

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

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

Μπορείτε να τεστάρετε τη συνάρτησή σας με αυτή τη λίστα:

a<-list(
    list(name="a",  salary=100),
    list(name="b",  salary=200),
    list(name="c",  salary=300),
    list(name="d",  salary=400),
    list(name="e",  salary=500),
    list(name="f",  salary=600),
    list(name="g",  salary=700),
    list(name="h",  salary=800),
    list(name="i",  salary=900),
    list(name="j",  salary=1000)
)

Άσκηση 63

Έστω μία λίστα με 20 στοιχεία. Κάθε στοιχείο της λίστας είναι μία λίστα η οποία έχει 2 πεδία:

  • Το πεδίο name το οποίο περιέχει το όνομα μία ποδοσφαιρικής ομάδας.
  • Το πεδίο points το οποίο περιέχει τους βαθμούς που έχει συγκεντρώσει στο πρωτάθλημα.

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

Άσκηση 64

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

Άσκηση 65

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

Άσκηση 66

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

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

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

Άσκηση 67

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

a$a$a$a$a

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

Άσκηση 68

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

a[[a$a]]

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

Άσκηση 69

Δίνεται ότι ο παρακάτω κώδικας φτιάχνει ένα διάνυσμα που περιέχει όλα τα γράμματα του αγγλικού αλφάβητου:

a <- strsplit("abcdefghijklmnopqrstuvwxyz", "")[[1]]

Φτιάξτε κώδικα σε R ο οποίος να φτιάχνει μία λίστα με το όνομα vowels η οποία θα περιέχει 26 στοιχεία, ένα για κάθε γράμμα του αγγλικού αλφάβητου. Το κάθε στοιχείο θα έχει σαν όνομα το γράμμα του αλφάβητου και η τιμή του θα είναι TRUE/FALSE ανάλογα με το αν είναι φωνήεν ή όχι. Τα φωνήεντα είναι: 'aeiouy'

Δηλαδή θα πρέπει να μπορώ να γράφω:

vowels$e # Τυπώνει TRUE

vowels$b # Τυπώνει FALSE

Άσκηση 70

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

b<-a$a
a$b

Να τυπώνει "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
)

Φτιάξτε μία συνάρτηση η οποία θα παίρνει ένα όρισμα με το όνομα employee.name και θα επιστρέφει την αξία (value) του 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 με αυτό το όνομα.

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 στο ερώτημα:

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

Άσκηση 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 στο ερώτημα:

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

Άσκηση 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. Η στήλη αυτή θα περιέχει το μήκος του κάθε γονιδίου. Το μήκος ενός γονιδίου ορίζεται ώς η διαφορά μεταξύ της end θέσης και της start θέσης.

Άσκηση 78

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

  • A: περιέχει τυχαίες τιμές από το 1 μέχρι το 100
  • B: περιέχει τυχαίες τιμές από το 1 μέχρι το 100
  • 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,1,8,6,8),
  teliko = c(8,7,7,5,2,5,1,9,9,9)
)

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

Γράψτε κώδικα σε R ο οποίος να υπολογίζει το παρακάτω:

Αν η πρόοδος (proodos) μετράει για το 40% της τελικής βαθμολογίας και το τελικό διαγώνισμα (teliko) για το 60% και η βάση για να περάσει κάποιος το μάθημα είναι 5, πόσοι φοιτητές πέρασαν το μάθημα;

Άσκηση 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) και αν έχει μία ασθένεια (disease). Φτιάξτε μία συνάρτηση η οποία να παίρνει ως παράμετρο ένα data frame όπως το samples και να επιστρέφει ένα νέο data frame το οποιο να έχει 2 γραμμές με ονόματα: yes.mutation, no.mutation και 2 στήλες με ονόματα yes.disease και no.disease.

  • Στη γραμμή yes.mutation και στη στήλη yes.disease θα περιέχει το πλήθος των ανθρώπων που έχουν τη μετάλλαξη και την ασθένεια.
  • Στη γραμμή yes.mutation και στη στήλη no.disease θα περιέχει το πλήθος των ανθρώπων που έχουν τη μετάλλαξη αλλά δεν έχουν την ασθένεια.
  • Στη γραμμή no.mutation και στη στήλη yes.disease θα περιέχει το πλήθος των ανθρώπων που δεν έχουν τη μετάλλαξη αλλά έχουν την ασθένεια.
  • Στη γραμμή no.mutation και στη στήλη no.disease θα περιέχει το πλήθος των ανθρώπων που δεν έχουν τη μετάλλαξη και δεν έχουν την ασθένεια.

Άσκηση 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_1200_1500: Περιέχει TRUE αν υπάρχει έστω και μία θέση του γονιδίου η οποία να ανήκει στο κλειστό διάστημα: [1200, 1500], διαφορετικά περιέχει FALSE
  • col_NOT_1700_1800: Περιέχει TRUE αν ΔΕΝ υπάρχει καμία θέση του γονιδίου η οποία να ανήκει στο κλειστό διάστημα [1700, 1800], διαφορετικά περιέχει FALSE

Άσκηση 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 Περιέχει το πλήθος των θέσεων του γονιδίου που ανήκουν στο κλειστό διάστημα: [1200, 1500].
  • col_NOT_1700_1800 Περιέχει το πλήθος των θέσεων του γονιδίου που ΔΕΝ ανήκουν στο κλειστό διάστημα: [1700, 1800]

Άσκηση 83

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

samples <- data.frame(
    name = unlist(lapply(c(1:50), function(x) { return (paste('Sample', x))})),
    age = as.integer(runif(50, 20, 90))
   )

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

  • name: Το όνομα ενός ανθρώπου
  • age: Η ηλικία του.

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

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

  • Αν το age είναι από 20 μέχρι και 45, τότε η τιμή είναι "young"
  • Αν η τιμή είναι μεγαλύτερη από 45 μέχρι και 60 τότε η τιμή είναι "middle_age"
  • Αν η τιμή είναι μεγαλύτερη από 60 μέχρι και 80 τότε η τιμή είναι "old"
  • Αν η τιμή είναι μεγαλύτερη από 80 τότε η τιμή είναι "very_old"

Άσκηση 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'))

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

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

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

Πάρτε μόνο τις γραμμές όπου η στήλη "EIDOS_THESIS" έχει τη τιμή "GEL GENIKH SEIRA HM. (NEO)"

Άσκηση 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'))

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

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

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

Πάρτε μόνο τις γραμμές όπου η στήλη "EIDOS_THESIS" είναι "GEL GENIKH SEIRA HM. (NEO)"

Άσκηση 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'))

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

Αφού φορτώσετε αυτό το αρχείο, φτιάξτε ένα νέο data frame το οπου θα περιέχει μόνο τις γραμμές από το baseis όπου η στήλη "EIDOS_THESIS" έχει τιμή "GEL GENIKH SEIRA HM. (NEO)". Στη συνέχεια προσθέστε στο νέο data frame τη στήλη με το όνομα "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'))

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

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

Άσκηση 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'))

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

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

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

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

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

Άσκηση 89

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

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

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

Αφού φορτώσετε αυτό το αρχείο:

  • Φτιάξτε ένα barplot με το πλήθος των σχολών που έχει το κάθε ίδρυμα (στήλη: "IDRYMA")

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

img

Σημείωση: Βάλτε στο μέιλ με τις απαντήσεις σας ΜΟΝΟ τον κώδικα που παράγει το γράφημα. Όχι το ίδιο το γράφημα.

Άσκηση 90

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

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

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

Αφού φορτώσετε αυτό το αρχείο:

  • Βρείτε τα Ιδρύματα που έχουν σχολή η οποία να έχει το "BIOL" στο όνομά της, έστω ότι ονομάζουμε το σύνολο αυτό: BIOLOGIA (hint: grepl)
  • Βρείτε τα Ιδρύματα που έχουν σχολή η οποία να έχει το "XHMEIAS" στο όνομά της, έστω ότι ονομάζουμε το σύνολο αυτό: XHMEIA (hint: grepl)
  • Βρείτε τα κοινά στοιχεία μεταξύ των BIOLOGIA, XHMEIA (hint: intersect), έστω COMMON η μεταβλητή με τα κοινά στοιχεία.
  • Για τα Ιδρύματα που υπάρχουν στο COMMON, βρείτε το πλήθος των επιτυχόντων στη σχολή που έχει το BIOL στο όνομά της.
  • Για τα Ιδρύματα που υπάρχουν στο COMMON, βρείτε το πλήθος των επιτυχόντων στη σχολή που έχει το XHMEIAS στο όνομά της.
  • Φτιάξτε ένα barplot όπου η κάθε "μπάρα" θα είναι ένα Ίδρυμα από τα COMMON. Η κάθε μπάρα θα έχει δύο σκιάσεις. Η πρώτη θα δείχνει το πλήθος των επιτυχόντων στο τμήμα του ιδρύματος που έχει το "BIOL" στο όνομά του και η δεύτερη σκίαση θα δείχνει το πλήθος των επιτυχόντων στο τμήμα του ιδρύματος που έχει το "XHMEIAS στο όνομά του.

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

img

Σημείωση: Βάλτε στο μέιλ με τις απαντήσεις σας ΜΟΝΟ τον κώδικα που παράγει το γράφημα. Όχι το ίδιο το γράφημα.

Άσκηση 91

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

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

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

Αφού φορτώσετε αυτό το αρχείο:

  • Βρείτε το πλήθος επιτυχόντων στη σχολή με το όνομα "BIOLOGIAS (HRAKLEIO)"
  • Βρείτε το πλήθος επιτυχόντων στη σχολή με το όνομα "FYSIKHS (HRAKLEIO)"
  • Βρείτε το πλήθος επιτυχόντων στη σχολή με το όνομα "BIOLOGIAS (PATRA)"
  • Βρείτε το πλήθος επιτυχόντων στη σχολή με το όνομα "FYSIKHS (PATRA)"

Φτιάξτε το παρακάτω barplot:

img

Σημείωση: Βάλτε στο μέιλ με τις απαντήσεις σας ΜΟΝΟ τον κώδικα που παράγει το γράφημα. Όχι το ίδιο το γράφημα.

Άσκηση 92

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

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

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

Αφού φορτώσετε αυτό το αρχείο:

  • Πάρτε μόνο τις γραμμές που: Η στήλη IDRYMA περιέχει το KRHTHS KAI η στήλη "EIDOS_THESIS" είναι ίση με "GEL GENIKH SEIRA HM. (NEO)".
  • Βρείτε τον μέσο όρο των μορίων (στήλη: MORIA) για κάθε ίδρυμα. Δηλαδή για κάθε ένα από τα 3 ιδρύματα που έχει το KRHTHS στο όνομά του, θα βρείτε τον μέσο όρο των μορίων των σχολών του. Συνολικά θα έχετε βρει 3 μέσους όρους.
  • Φτιάξτε ένα barplot με αυτούς τους μέσους όρους. Κάθε μπάρα θα πρέπει να έιναι ένα ίδρυμα .

Το αποτέλεσμα θα πρέπει να είναι κάτι σαν αυτό:

img

Σημείωση: Βάλτε στο μέιλ με τις απαντήσεις σας ΜΟΝΟ τον κώδικα που παράγει το γράφημα. Όχι το ίδιο το γράφημα.

Άσκηση 93

Φτιάξτε μια γραφική παράσταση της συνάρτησης sin(x) για x από -4 μέχρι 4. Χρησιμοποιήστε βήμα 0.01

hint:

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

Σημείωση: Βάλτε στο μέιλ με τις απαντήσεις σας ΜΟΝΟ τον κώδικα που παράγει το γράφημα. Όχι το ίδιο το γράφημα.

Άσκηση 94

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

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

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

hint:

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

Σημείωση: Βάλτε στο μέιλ με τις απαντήσεις σας ΜΟΝΟ τον κώδικα που παράγει το γράφημα. Όχι το ίδιο το γράφημα.

Άσκηση 95

Φττιάξτε μια γραφική παράσταση χρησιμοποιώντας γραμμές. Οι γραμμές πρέπει να είναι έτσι ώστε να φαίνεται (στο περίπου) το γράμμα "A". Δηλαδή γράψτε κώδικα R ο οποίος παράγει μία γραφική παράσταση σαν αυτή:

img

Σημείωση: Βάλτε στο μέιλ με τις απαντήσεις σας ΜΟΝΟ τον κώδικα που παράγει το γράφημα. Όχι το ίδιο το γράφημα.

Άσκηση 96

Οι παρακάτω εντολές:

temperatures <- read.csv(url("https://www.dropbox.com/s/pelvlslkoja0j5b/f9437817beb9e8e65ffd4dd2d198ffaa.csv?dl=1"))
temperatures$X <- NULL

Φορτώνουν ένα data frame με τις θερμοκρασίες που μετρήθηκαν τις ίδες χρονικές στιγμές μιας μέρας στην Αθήνα και στη Θεσσαλονίκη.

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

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

Το plot που θα φτιάξετε θα πρέπει να είναι σαν αυτό:

img

Σημείωση: Βάλτε στο μέιλ με τις απαντήσεις σας ΜΟΝΟ τον κώδικα που παράγει το γράφημα. Όχι το ίδιο το γράφημα.

Άσκηση 97

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

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

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

Αφού φορτώσετε αυτό το αρχείο:

  • Παρτε μόνο τις γραμμές για τις οποίες η στήλη EIDOS_THESIS έχει τιμή: GEL GENIKH SEIRA HM. (NEO).
  • Από το αποτέλεσμα πάρτε τις τιμές της στήλης: MORIA.
  • Ταξινομήστε αυτές τις τιμές από το μικρότερο στο μεγαλύτερο (hint: sort)
  • Κάντε ένα πλοτ με αυτές τις ταξινομημένες τιμές.

Το 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

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

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

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

Αφού φορτώσετε αυτό το αρχείο:

  • Έστω το διάνυσμα:
inst <- c("PAN. KRHTHS", "PAN. PATRWN", "EKPA", "PAN. IWANNINWN")
  • Πάρτε τις γραμμές για τις οποίες η στήλη IDRYMA ανήκει σε ένα από τα ιδρύματα που υπάρχουν στο διάνυσμα inst.
  • Φτιάξτε μια καινούρια στήλη με το όνομα "LESS_1000". Η στήλη αυτή θα έχει τιμή TRUE αν τα μόρια εισαγωγής μίας σχολής είναι μικρότερα από 10000, διαφορετικά θα έχει τιμή FALSE.
  • Φτιάξτε ενα barplot όπου η κάθε "μπάρα" θα είναι ένα Ίδρυμα από τα ιδρύματα που υπάρχουν στο διάνυσμα inst. Η κάθε μπάρα θα έχει δύο σκιάσεις. Η πρώτη θα δείχνει το πλήθος των σχολών του ιδρύματος που έχουν μόρια εισαγωγής <10000 και η δεύτερη σκίαση θα δείχνει το πλήθος των σχολών του ιδρύματος που έχουν μόρια εισαγωγής >=10000.

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

img

Σημείωση: Βάλτε στο μέιλ με τις απαντήσεις σας ΜΟΝΟ τον κώδικα που παράγει το γράφημα. Όχι το ίδιο το γράφημα.

Άσκηση 100

  • Φτιάξτε ένα διάνυσμα με το όνομα a με 100 τυχαίες τιμές από το -1 μέχρι το 1
  • Φτιάξτε ένα διάνυσμα με το όνομα b με 100 τυχαίες τιμές από το -1 μέχρι το 1
  • Φτιάξτε ένα scatter plot (συζευγμένα δεδομένα) με τα σημεία που ορίζονται στο επίπεδο όπου X=a και Y=b. Δηλαδή το scatter plot θα δείχνει πως κατανέμονται στον χώρο τα 100 τυχαία σημεία που φτιάξατε.
  • Τα σημεία που είναι στο 1ο τεταρτημόριο (δηλαδή a>=0 και b>=0) θα πρέπει να είναι μπλε (blue)
  • Τα σημεία που είναι στο 2ο τεταρτημόριο (δηλαδή a<0 και b>=0) θα πρέπει να είναι κόκκινα (red)
  • Τα σημεία που είναι στο 3ο τεταρτημόριο (δηλαδή a<0 και b<0) θα πρέπει να είναι πράσινα (green)
  • Τα σημεία που είναι στο 4ο τεταρτημόριο (δηλαδή a>=0 και b<0) θα πρέπει να είναι μαύρα (black).

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

img

  • ΠΡΟΣΟΧΗ Αυτό είναι ένα plot για τα τυχαία δεδομένα που παρήγαγε σε εμένα. Το δικό σας ίσως να διαφέρει λίγο.
  • Σημείωση: Βάλτε στο μέιλ με τις απαντήσεις σας ΜΟΝΟ τον κώδικα που παράγει το γράφημα. Όχι το ίδιο το γράφημα.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment