Τύποι δεδομένων σε R με Παράδειγμα
⚡ Έξυπνη Σύνοψη
Οι τύποι δεδομένων στην R ορίζουν τον τρόπο με τον οποίο αποθηκεύονται οι τιμές στη μνήμη και οι τελεστές αποφασίζουν τι μπορεί να κάνει η R με αυτές. Διανύσματα, μεταβλητές, αριθμητικοί, σχεσιακοί, λογικοί και τελεστές ανάθεσης καλύπτονται εδώ με εκτελέσιμα παραδείγματα.
Ποιοι είναι οι τύποι δεδομένων στο R;
Ακολουθούν οι τύποι δεδομένων ή οι δομές δεδομένων στον προγραμματισμό R:
- Σκαλαράκια
- Διανύσματα (αριθμητικά, χαρακτήρες, λογικά)
- Πίνακες
- Πλαίσια δεδομένων
- Λίστες
Αυτή η λίστα συνδυάζει δύο σχετικές ιδέες και ο διαχωρισμός τους διευκολύνει την παρακολούθηση της υπόλοιπης σελίδας. A Τύπος δεδομένων περιγράφει τι είναι μια μεμονωμένη τιμή — ένας αριθμός, ένα κομμάτι κειμένου, ένα ΣΩΣΤΟ ή ένα ΛΑΘΟΣ. Ένα δομή δεδομένων Περιγράφει πόσες τιμές συγκρατούνται μαζί και σε ποιο σχήμα. Οι βαθμωτές τιμές, τα διανύσματα, οι πίνακες, τα πλαίσια δεδομένων και οι λίστες είναι δομές. Οι τιμές μέσα σε αυτές εξακολουθούν να ανήκουν σε έναν από τους βασικούς τύπους της R.
| Structure | Διαστάσεις | Επιτρέπονται οι μικτές μορφές; | Τυπική χρήση |
|---|---|---|---|
| Βαθμωτό μέγεθος | Διάνυσμα μήκους-1 | Οχι | Μία μόνο μέτρηση ή σημαία |
| διάνυσμα | 1 | Οχι | Μια στήλη με αναγνώσεις ενός τύπου |
| Μήτρα | 2 | Οχι | Αριθμητικά πλέγματα και γραμμική άλγεβρα |
| Πλαίσιο δεδομένων | 2 | Ναι, ένας τύπος ανά στήλη | Σύνολα δεδομένων σε μορφή πίνακα |
| Λιστα | 1, αλλά μπορεί να ενσωματωθεί | Ναι, οτιδήποτε ανά στοιχείο | Αποτελέσματα μοντέλου και μικτά κοντέινερ |
Η R δεν έχει ξεχωριστό βαθμωτό τύπο: ένα βαθμωτό είναι απλώς ένα διάνυσμα μήκους ένα, γι' αυτό και γράφεται τόσος πολύς κώδικας R για ολόκληρα διανύσματα ταυτόχρονα.
Βασικοί τύποι δεδομένων στην R
Κάθε τιμή στο R ανήκει σε έναν από ένα μικρό σύνολο βασικών (ατομικών) τύπων:
- Το 4.5 είναι μια δεκαδική τιμή που ονομάζεται αριθμητική τιμή.
- Το 4 μοιάζει με ακέραιο αριθμό, αλλά η R εξακολουθεί να το αποθηκεύει ως διπλάσιο. Γράψτε 4L όταν απαιτείται ένας αληθής ακέραιος αριθμός.
- Η τιμή TRUE ή FALSE είναι μια Boolean τιμή, που ονομάζεται λογική τιμή στην R.
- Η τιμή μέσα στο " " ή " είναι κείμενο (μια συμβολοσειρά). Αυτές οι τιμές ονομάζονται χαρακτήρες.
Δύο ακόμη τύποι συμπληρώνουν το σύνολο. Οι σύνθετες τιμές όπως το 3+2i περιέχουν ένα πραγματικό και ένα φανταστικό μέρος, ενώ οι ακατέργαστες τιμές περιέχουν bytes. Και οι δύο εμφανίζονται σπάνια στην καθημερινή ανάλυση, αλλά παρατίθενται στη βάση R. τεκμηρίωση typeof() παράλληλα με τους τέσσερις κοινούς τύπους.
| Χαρακτηριστικά | Παράδειγμα τιμής | επιστρέφει η κλάση() | Η typeof() επιστρέφει |
|---|---|---|---|
| λογικός | ΑΛΗΘΙΝΗ | λογικός | λογικός |
| Ακέραιος αριθμός | 4L | ακέραιος αριθμός | ακέραιος αριθμός |
| Double (αριθμητικός) | 4.5 | αριθμητικός | διπλασιαστεί |
| Χαρακτήρας | «Ο Ρ είναι φανταστικός» | χαρακτήρας | χαρακτήρας |
| Συγκρότημα | 3+2i | συγκρότημα | συγκρότημα |
| Ωμοί ξηροί καρποί | ως.raw(10) | ακατέργαστος | ακατέργαστος |
Μπορούμε να ελέγξουμε τον τύπο μιας μεταβλητής με τη συνάρτηση κλάσης.
Παράδειγμα 1: Έλεγχος αριθμητικής μεταβλητής
# Declare variables of different types # Numeric x <- 28 class(x)
Παραγωγή:
## [1] "numeric"
Παράδειγμα 2: Έλεγχος μιας μεταβλητής χαρακτήρα
# String y <- "R is Fantastic" class(y)
Παραγωγή:
## [1] "character"
Παράδειγμα 3: Έλεγχος μιας λογικής μεταβλητής
# Boolean z <- TRUE class(z)
Παραγωγή:
## [1] "logical"
Σημειώστε ότι η class() απαντά "αριθμητικό" για το 28 παρόλο που το 28 δεν έχει δεκαδικό μέρος. Η R το αποθήκευσε ως double και μόνο η typeof() το αποκαλύπτει αυτό. Η επόμενη διαφορά που αξίζει να μάθουμε είναι ο τρόπος με τον οποίο αυτές οι τιμές παίρνουν ονόματα.
Μεταβλητές στο R
Οι μεταβλητές είναι ένα από τα βασικά δομικά στοιχεία στην R που αποθηκεύουν τιμές και έχουν σημασία για όποιον ασχολείται με την επιστήμη δεδομένων. Μια μεταβλητή στην R μπορεί να αποθηκεύσει έναν αριθμό, ένα αντικείμενο, ένα στατιστικό αποτέλεσμα, ένα διάνυσμα, ένα σύνολο δεδομένων ή μια πρόβλεψη μοντέλου — ουσιαστικά οτιδήποτε εξάγει η R. Μπορούμε να χρησιμοποιήσουμε αυτήν τη μεταβλητή αργότερα απλώς καλώντας το όνομα της μεταβλητής.
Για να δηλώσουμε μια μεταβλητή στην R, πρέπει να εκχωρήσουμε ένα όνομα μεταβλητής. Το όνομα δεν πρέπει να περιέχει κενό. Μπορούμε να χρησιμοποιήσουμε _ για να ενώσουμε δύο λέξεις.
Τα ονόματα μπορούν να περιέχουν γράμματα, ψηφία, τελείες και υπογράμμιση, αλλά πρέπει να ξεκινούν με ένα γράμμα ή μια τελεία, και οι δεσμευμένες λέξεις όπως TRUE, FALSE και NULL δεν μπορούν να χρησιμοποιηθούν ως ονόματα. Για να προσθέσετε μια τιμή στη μεταβλητή, χρησιμοποιήστε <- ή =.
Εδώ είναι η σύνταξη:
# First way to declare a variable: use the `<-` name_of_variable <- value # Second way to declare a variable: use the `=` name_of_variable = value
Στη γραμμή εντολών, μπορούμε να γράψουμε τους ακόλουθους κωδικούς για να δούμε τι συμβαίνει:
Παράδειγμα 1: Αντιστοίχιση τιμής και εκτύπωσή της
# Print variable x
x <- 42
x
Παραγωγή:
## [1] 42
Παράδειγμα 2: Δήλωση δεύτερης μεταβλητής
y <- 10 y
Παραγωγή:
## [1] 10
Παράδειγμα 3: Χρήση δύο μεταβλητών σε μία έκφραση
# We call x and y and apply a subtraction
x-y
Παραγωγή:
## [1] 32
Μια μεταβλητή που περιέχει πολλές τιμές του ίδιου τύπου είναι ένα διάνυσμα, το οποίο είναι η δομή που αναμένει σχεδόν κάθε συνάρτηση R.
Διανύσματα σε R
Ένα διάνυσμα είναι μια μονοδιάστατη συλλογή στην οποία κάθε στοιχείο μοιράζεται τον ίδιο τύπο. Μπορούμε να δημιουργήσουμε ένα διάνυσμα με όλους τους βασικούς τύπους δεδομένων R που μάθαμε νωρίτερα. Ο απλούστερος τρόπος για να δημιουργήσετε ένα διάνυσμα στην R είναι να χρησιμοποιήσετε τη συνάρτηση c().
Παράδειγμα 1: Δημιουργία αριθμητικού διανύσματος
# Numerical
vec_num <- c(1, 10, 49)
vec_num
Παραγωγή:
## [1] 1 10 49
Παράδειγμα 2: Δημιουργία διανύσματος χαρακτήρα
# Character vec_chr <- c("a", "b", "c") vec_chr
Παραγωγή:
## [1] "a" "b" "c"
Παράδειγμα 3: Δημιουργία Λογικού Διανύσματος
# Boolean vec_bool <- c(TRUE, FALSE, TRUE) vec_bool
Παραγωγή:
##[1] TRUE FALSE TRUE
Αν η c() λάβει ένα μείγμα τύπων, δεν αποτυγχάνει. Μεταφέρει αθόρυβα κάθε στοιχείο στον πιο γενικό τύπο που υπάρχει, έτσι ώστε η c(1, "a", TRUE) να γίνεται ένα διάνυσμα χαρακτήρων. Μπορούμε επίσης να κάνουμε αριθμητικούς υπολογισμούς σε διανύσματα σε R.
Παράδειγμα 4: Προσθήκη δύο διανυσμάτων στοιχείο προς στοιχείο
# Create the vectors vect_1 <- c(1, 3, 5) vect_2 <- c(2, 4, 6) # Take the sum of A_vector and B_vector sum_vect <- vect_1 + vect_2 # Print out total_vector sum_vect
Παραγωγή:
[1] 3 7 11
Η πρόσθεση λειτούργησε στοιχείο προς στοιχείο επειδή και τα δύο διανύσματα έχουν το ίδιο μήκος. Όταν τα μήκη διαφέρουν, το R ανακυκλώνει το μικρότερο διάνυσμα, επαναλαμβάνοντάς το μέχρι να ταιριάζει με το μεγαλύτερο, και προειδοποιεί μόνο όταν το μεγαλύτερο μήκος δεν είναι πολλαπλάσιο του μικρότερου.
Παράδειγμα 5: Τεμαχισμός των Πρώτων Πέντε Στοιχείων
Στην R, είναι δυνατό να κάνουμε τομή ενός διανύσματος. Σε ορισμένες περιπτώσεις, μας ενδιαφέρουν μόνο τα πρώτα πέντε στοιχεία ενός διανύσματος. Μπορούμε να χρησιμοποιήσουμε την εντολή [1:5] για να εξηγήσουμεtract τις τιμές 1 έως 5.
# Slice the first five rows of the vector
slice_vector <- c(1,2,3,4,5,6,7,8,9,10)
slice_vector[1:5]
Παραγωγή:
## [1] 1 2 3 4 5
Παράδειγμα 6: Δημιουργήστε ένα εύρος με την άνω και κάτω τελεία OperaTor
Ο συντομότερος τρόπος για να δημιουργήσετε ένα εύρος τιμών είναι να χρησιμοποιήσετε τον τελεστή άνω και κάτω τελεία (:) μεταξύ δύο αριθμών. Για παράδειγμα, από το παραπάνω παράδειγμα, μπορούμε να γράψουμε c(1:10) για να δημιουργήσουμε ένα διάνυσμα τιμών από το ένα έως το δέκα.
# Faster way to create adjacent values
c(1:10)
Παραγωγή:
## [1] 1 2 3 4 5 6 7 8 9 10
Επειδή ένα διάνυσμα αλλάζει σιωπηλά τύπο όταν αναμειγνύεται, αξίζει να γνωρίζετε πώς να επιθεωρείτε και να μετατρέπετε τύπους κατόπιν ζήτησης.
Πώς να ελέγξετε και να μετατρέψετε τύπους δεδομένων σε R
Τρεις οικογένειες συναρτήσεων απαντούν στα τρία ερωτήματα που προκύπτουν συνεχώς: τι είναι αυτό, είναι ένας δεδομένος τύπος και μπορεί αυτό να γίνει ένας άλλος τύπος.
| Οικογένεια συναρτήσεων | Ερώτηση που απαντά | Παραδείγματα |
|---|---|---|
| κλάση(), τύπος(), λειτουργία() | Τι είδους είναι αυτή η τιμή; | κλάση(28), τύπος(28), λειτουργία(28) |
| είναι.*() | Είναι αυτή η τιμή τύπου Χ; | is.numeric(), is.character(), is.logical() |
| ως.*() | Μπορεί αυτή η τιμή να γίνει τύπου Χ; | as.numeric(), as.character(), as.integer() |
| str () | Πώς μοιάζει συνολικά αυτό το αντικείμενο; | str(αριθμός_διανυσμάτων) |
# Three different views of the same value x <- 28 class(x) # "numeric" -- the class used for method dispatch typeof(x) # "double" -- how R stores the value internally mode(x) # "numeric" -- the older S-style mode # Ask a yes/no question about a type is.numeric(x) # TRUE is.character(x) # FALSE # Convert between types as.character(x) # "28" as.integer("28") # 28 stored as an integer as.numeric("abc") # NA, with a coercion warning
Δύο κανόνες εξηγούν τις περισσότερες εκπλήξεις εδώ. Πρώτον, η class() αναφέρει την κλάση που χρησιμοποιείται για την αποστολή της μεθόδου, ενώ η typeof() αναφέρει την εσωτερική αποθήκευση, γι' αυτό και η 28 είναι "αριθμητική" στη μία και "διπλή" στην άλλη. Δεύτερον, μια μετατροπή που δεν μπορεί να επιτύχει δεν σταματά το σενάριο: η as.numeric("abc") επιστρέφει NA και εκτυπώνει μια προειδοποίηση εξαναγκασμού, επομένως οι σιωπηλές NA μετά από μια εισαγωγή είναι σχεδόν πάντα ένα πρόβλημα τύπου. Η ίδια λογική οδηγεί παράγοντες, τα οποία αποθηκεύουν κατηγορίες ως ακέραιους κωδικούς συν έναν πίνακα επιπέδων.
Αφού καθοριστούν οι τύποι, οι τελεστές που ενεργούν σε αυτούς είναι οι επόμενοι.
R Αριθμητική Operaκορμοί
Αρχικά θα δούμε τους βασικούς αριθμητικούς τελεστές στην R. Ακολουθούν οι αριθμητικοί τελεστές στον προγραμματισμό R και τι αντιπροσωπεύουν:
| OperaTor | Περιγραφή |
|---|---|
| + | Προσθήκη |
| - | Σεtracσμού |
| * | Πολλαπλασιασμός |
| / | διαίρεση |
| ^ ή ** | Επέκταση |
| %% | Modulo (υπόλοιπο μετά τη διαίρεση) |
| %/% | Διαίρεση ακεραίου (πηλίκο, υπόλοιπο απορρίπτεται) |
Κάθε ένας από αυτούς τους τελεστές είναι διανυσματοποιημένος, επομένως η ίδια παράσταση λειτουργεί σε μία μόνο τιμή ή σε ολόκληρη στήλη.
Παράδειγμα 1: Πρόσθεση
# An addition
3 + 4
Παραγωγή:
## [1] 7
Μπορείτε εύκολα να αντιγράψετε και να επικολλήσετε τον παραπάνω κώδικα R στο Rstudio Κονσόλα. Σε αυτό το άρθρο, η έξοδος εμφανίζεται σε γραμμές που ξεκινούν με ##. Για παράδειγμα, αν γράψουμε τον κώδικα print("Guru99") η κονσόλα εκτυπώνει [1] "Guru99", το οποίο αυτή η σελίδα θα εμφανιζόταν ως ## [1] "Guru99 ".
Το ## σηματοδοτεί μια γραμμή εκτυπωμένης εξόδου και ο αριθμός στην αγκύλη ([1]) είναι ο δείκτης της πρώτης τιμής σε αυτήν τη γραμμή και όχι μέρος του αποτελέσματος.
Οι προτάσεις που ξεκινούν με # είναι σχόλια. Μπορούμε να χρησιμοποιήσουμε το # μέσα σε ένα σενάριο R για να προσθέσουμε οποιαδήποτε σημείωση θέλουμε και η R την αγνοεί κατά τον χρόνο εκτέλεσης.
Παράδειγμα 2: Πολλαπλασιασμός
# A multiplication
3*5
Παραγωγή:
## [1] 15
Παράδειγμα 3: Διαίρεση
# A division
(5+5)/2
Παραγωγή:
## [1] 5
Παράδειγμα 4: Εκθετοποίηση
# Exponentiation
2^5
Παραγωγή:
## [1] 32
Παράδειγμα 5: Ενότητα
# Modulo
28%%6
Παραγωγή:
## [1] 4
Η αριθμητική παράγει αριθμούς. Η επόμενη ομάδα τελεστών παράγει αντ' αυτού TRUE και FALSE.
Σχεσιακή R (Σύγκριση) Operaκορμοί
Οι σχεσιακοί τελεστές συγκρίνουν δύο τιμές και επιστρέφουν ένα λογικό αποτέλεσμα. Είναι οι τελεστές που δημιουργούν τις συνθήκες που χρησιμοποιούνται για το φιλτράρισμα και διανυσματοποιούνται με τον ίδιο ακριβώς τρόπο όπως οι αριθμητικοί τελεστές.
| OperaTor | Περιγραφή |
|---|---|
| > | Μεγαλύτερος από |
| < | Less από |
| >= | Μεγαλύτερο ή ίσο με |
| <= | Less από ή ίσο με |
| == | Ακριβώς ίσο με |
| != | Οχι ίσο με |
a <- 10 b <- 3 a > b # TRUE a < b # FALSE a >= 10 # TRUE a <= 3 # FALSE a == b # FALSE a != b # TRUE # Relational operators are vectorised scores <- c(45, 78, 90, 62) scores >= 60 # FALSE TRUE TRUE TRUE
Δύο συνήθειες εξοικονομούν χρόνο εδώ. Χρησιμοποιήστε == για σύγκριση και <- για ανάθεση, επειδή ένα μονό = μέσα σε μια συνθήκη είναι ένα συνηθισμένο σφάλμα για αρχάριους. Και αποφύγετε το == σε διπλές περιπτώσεις: η στρογγυλοποίηση με κινητή υποδιαστολή σημαίνει ότι 0.1 + 0.2 == 0.3 είναι ΛΑΘΟΣ, επομένως το isTRUE(all.equal(0.1 + 0.2, 0.3)) είναι η ασφαλής δοκιμή. Οι συγκρίσεις σε ταξινομημένα πλαίσια δεδομένων ακολουθήστε τους ίδιους κανόνες.
R Λογικό Operaκορμοί
Με τους λογικούς τελεστές, θέλουμε να επιστρέψουμε τιμές μέσα στο διάνυσμα με βάση λογικές συνθήκες. Ο παρακάτω πίνακας παραθέτει τους λογικούς τελεστές που είναι διαθέσιμοι στην R.
Οι λογικές προτάσεις στην R είναι τυλιγμένες μέσα στο []. Μπορούμε να προσθέσουμε όσες προτάσεις υπό όρους θέλουμε, αλλά πρέπει να τις συμπεριλάβουμε σε παρενθέσεις. Μπορούμε να ακολουθήσουμε αυτήν τη δομή για να δημιουργήσουμε μια πρόταση υπό όρους:
variable_name[(conditional_statement)]
Με το variable_name να αναφέρεται στη μεταβλητή που θέλουμε να χρησιμοποιήσουμε για την πρόταση, δημιουργούμε τη λογική πρόταση, για παράδειγμα variable_name > 0. Τέλος, χρησιμοποιούμε τις αγκύλες για να οριστικοποιήσουμε τη λογική πρόταση. Παρακάτω είναι ένα παράδειγμα λογικής πρότασης.
Παράδειγμα 1: Σύγκριση κάθε στοιχείου ενός διανύσματος
# Create a vector from 1 to 10
logical_vector <- c(1:10)
logical_vector>5
Παραγωγή:
## [1]FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
Στην παραπάνω έξοδο, η R διαβάζει κάθε τιμή και τη συγκρίνει με την πρόταση logical_vector>5. Εάν η τιμή είναι αυστηρά μεγαλύτερη από πέντε, τότε η συνθήκη είναι TRUE, διαφορετικά FALSE. Η R επιστρέφει ένα διάνυσμα TRUE και FALSE.
Παράδειγμα 2: Διατηρήστε μόνο τα στοιχεία που ταιριάζουν
Στο παρακάτω παράδειγμα, θέλουμε να πούμεtract τις τιμές που πληρούν μόνο την συνθήκη «είναι αυστηρά μεγαλύτερο από πέντε». Για αυτό, μπορούμε να τυλίξουμε τη συνθήκη μέσα σε αγκύλες που προηγούνται από το διάνυσμα που περιέχει τις τιμές.
# Print value strictly above 5
logical_vector[(logical_vector>5)]
Παραγωγή:
## [1] 6 7 8 9 10
Παράδειγμα 3: Συνδυασμός δύο συνθηκών
# Print 5 and 6
logical_vector <- c(1:10)
logical_vector[(logical_vector>4) & (logical_vector<7)]
Παραγωγή:
## [1] 5 6
Το Παράδειγμα 3 χρησιμοποιεί το μοναδικό εμπορικό "&" επίτηδες. Οι μονοχαρακτήρες τελεστές & και | συγκρίνουν τα διανύσματα στοιχείο προς στοιχείο και επιστρέφουν ένα διάνυσμα, το οποίο είναι αυτό που χρειάζεται το υποσύνολο. Οι διπλές μορφές && και || επιστρέφουν μία τιμή και ανήκουν στις συνθήκες if() και while(). Εφόσον Ε 4.3.0, η μεταβίβαση ενός ορίσματος μεγαλύτερου από ένα στοιχείο στο && ή στο || αποτελεί σφάλμα και όχι προειδοποίηση, επομένως οι δύο οικογένειες δεν είναι πλέον εναλλάξιμες. Ο τελεστής ! αναιρεί μια συνθήκη και το xor() δίνει αποκλειστικό OR.
Ανάθεση R Operaκορμοί
Οι τελεστές ανάθεσης συνδέουν μια τιμή με ένα όνομα. Η R προσφέρει περισσότερους από αυτούς από τις περισσότερες γλώσσες και οι διαφορές έχουν σημασία μόλις ο κώδικας μεταφερθεί σε λειτουργίες.
| OperaTor | Περιγραφή |
|---|---|
| <- | Αριστερή ανάθεση, η ιδιωματική επιλογή στο R |
| = | Αριστερή ανάθεση, αλλά συνήθως κρατείται για ορίσματα συνάρτησης |
| -> | Σωστή ανάθεση, έγκυρη αλλά σπάνια χρησιμοποιείται |
| <<- | Υπερανάθεση που αναζητά περιβάλλοντα που περικλείουν |
| - >> | Δεξιά υπερανάθεση |
# Left assignment -- the idiomatic form count <- 5 # Equals sign: works, but reserve it for function arguments count = 5 round(3.14159, digits = 2) # Right assignment 5 -> count # Superassignment, used inside functions to reach an outer scope count <<- 5
Οι οδηγοί στυλ συνιστούν το <- για τη δημιουργία αντικειμένων και το = για την ονομασία ορισμάτων μέσα σε μια κλήση, επειδή οι δύο ρόλοι παραμένουν οπτικά διακριτοί. Χρησιμοποιήστε το <<- με φειδώ: αλλάζει ένα αντικείμενο εκτός της τρέχουσας συνάρτησης και καθιστά πιο δύσκολο τον συλλογισμό σχετικά με τον κώδικα. Μόλις η ανάθεση και οι τύποι γίνουν βολικοί, τα επόμενα βήματα είναι εισαγωγή πραγματικών δεδομένων και ρέσαping με το dplyr? Η Επισκόπηση της γλώσσας R τοποθετεί ολόκληρη την αλυσίδα εργαλείων στο σωστό πλαίσιο.

