Τί

Τίποτα σε R

1 άσκηση

Σχετικά με την έννοια Τίποτα

Πολλές γλώσσες έχουν έναν τρόπο, όπως το null ή το none, για να δηλώσουν μια τιμή που δεν υπάρχει. Επειδή η R είναι σχεδιασμένη να χειρίζεται μεγάλους όγκους δεδομένων (συχνά ακατάστατων), έχει πολλές μορφές του "τίποτα".

Ο γενικός στόχος είναι να επισημαίνονται οι τιμές που λείπουν ή είναι ύποπτες μόλις εμφανιστούν, και στη συνέχεια η εκτέλεση να συνεχίζει χωρίς να πετάει εξαίρεση.

NULL

Αν μια τιμή πραγματικά δεν υπάρχει, αντιπροσωπεύεται από το NULL. Αυτό είναι πιθανώς το πιο κοντινό σε αυτό που κάνουν η C ή η Python.

v <- c() # zero-length vector
v
#> NULL
is.null(v)
#> [1] TRUE

Σε πολλά πλαίσια, οι τιμές NULL απλώς αγνοούνται:

c(2, 3, NULL, 5)
#> [1] 2 3 5

NA

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

v <- c(1, 2, NA, 4, 5)
v
#> [1]  1  2 NA 4  5
is.na(v) # test for data gaps
#> [1] FALSE FALSE  TRUE FALSE FALSE

Έτσι, το NA είναι ένα σύμβολο θέσης, που προειδοποιεί τους ανθρώπους ότι πρέπει να αποφασίσουν πώς θα το χειριστούν.

Οι στατιστικές συναρτήσεις συνήθως επιστρέφουν NA εξ ορισμού, αν υπάρχουν τιμές NA. Αν θέλεις να αγνοηθούν αυτές οι τιμές, χρησιμοποίησε την παράμετρο na.rm (NA remove) για να το δηλώσεις ρητά:

v <- c(1, 2, NA, 4, 5)
mean(v)
#> [1] NA
mean(v, na.rm = TRUE)
#> [1] 3

NaN

Συντομογραφία του "Not a Number", το NaN επισημαίνει ένα πρόβλημα υπολογισμού σε περιπτώσεις όπου περιμέναμε έναν αριθμό.

n <- c(0, 2, 4)
d <- c(0, 1, 2)
n / d
#> [1] NaN   2   2  # 0/0 is mathematically undefined
is.nan(n / d)
#> [1]  TRUE FALSE FALSE

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

1 / 0
#> [1] Inf

Κενά διανύσματα

Ίσως παραδόξως, η R δεν έχει κάποιον τυπικό τρόπο να ελέγχει αν κάτι είναι κενό, αν και ορισμένα πακέτα τρίτων υλοποιούν δικές τους συναρτήσεις, όπως τη is.empty().

Ακόμη και η δημιουργία ενός κενού διανύσματος δεν είναι εντελώς προφανής. Είδαμε πιο πάνω ότι το c() χωρίς ορίσματα επιστρέφει NULL, όχι διάνυσμα.

is.vector(c())
#> [1] FALSE

Συναρτήσεις όπως η logical() ή η integer() παίρνουν ένα όρισμα που καθορίζει το επιθυμητό μήκος, το οποίο μπορεί να είναι μηδέν.

z <- logical(0)
is.vector(z)
#> [1] TRUE
length(z)
#> [1] 0

Μπορούμε επίσης να δημιουργήσουμε ένα διάνυσμα και μετά να αφαιρέσουμε κάθε στοιχείο του, όπως περιγράφεται στην έννοια Διανύσματα. Αυτό έχει ως αποτέλεσμα ένα διάνυσμα μήκους 0 κατάλληλου τύπου.

v <- 5
v[-1]  # delete the first element
#> numeric(0)
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα

Μάθε την έννοια Τίποτα