חיתוך וקטורים ואינדוקס
חלק מהיחידה יסודות במסלול ה-R של Coddy. שיעור 67 מתוך 78.
למדת איך לגשת לאיברים בודדים ולעבור על וקטורים. עכשיו נלמד איך לחלץ כמה איברים בבת אחת באמצעות חיתוך. הטכניקה הזאת מאפשרת לך לשלוף תת־קבוצה של וקטור בפעולה אחת.
כדי לחלץ כמה איברים, העבר וקטור של אינדקסים בתוך הסוגריים המרובעים:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)])פלט:
[1] 10 30 50אפשר גם להשתמש באופרטור הנקודתיים כדי לבחור טווח של איברים עוקבים:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4])פלט:
[1] 20 30 40אינדקסים שליליים הם עוצמתיים ב-R. הם מוציאים איברים מהבחירה במקום לבחור אותם:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2])פלט:
[1] 10 30 40 50אפשר להחריג כמה איברים על ידי העברת וקטור של אינדקסים שליליים:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)])פלט:
[1] 20 30 40זכור: אי אפשר לערבב אינדקסים חיוביים ושליליים באותה בחירה. R תציג שגיאה אם תנסה numbers[c(1, -2)].
אתגר
קלתקבלו שתי שורות קלט:
- רשימת מספרים המופרדים בפסיקים (לדוגמה,
100,200,300,400,500,600,700) - שני אינדקסים המופרדים בפסיק ומייצגים טווח שיש להוציא (לדוגמה,
2,5)
קוד הפתיחה כבר קורא את הקלט ויוצר את המערך המספרי. הדפיסו בדיוק ארבע שורות, לפי הסדר הזה:
- הדפיסו את האיברים במיקומים 1, 3 ו-5 באמצעות מערך של אינדקסים
- הדפיסו את האיברים ממיקום 2 עד מיקום 4 באמצעות אופרטור הנקודתיים
- הדפיסו את המערך ללא האיבר שבאינדקס הראשון שהתקבל (באמצעות אינדוקס שלילי)
- הדפיסו את המערך ללא האיברים מהאינדקס הראשון ועד האינדקס השני (באמצעות אינדוקס שלילי עם טווח)
לדוגמה, אם הקלט הוא:
10,20,30,40,50,60,70
3,5הפלט אמור להיות:
[1] 10 30 50
[1] 20 30 40
[1] 10 20 40 50 60 70
[1] 10 20 60 70הסבר:
- האיברים במיקומים 1, 3 ו-5 הם: 10, 30, 50
- האיברים ממיקום 2 עד 4 הם: 20, 30, 40
- הוצאה של מיקום 3 נותנת: 10, 20, 40, 50, 60, 70
- הוצאה של המיקומים 3 עד 5 נותנת: 10, 20, 60, 70
נסו בעצמכם
# קראו את הקלט
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
indices_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# המירו את המספרים המופרדים בפסיקים לווקטור מספרי
numbers <- as.numeric(strsplit(numbers_input, ",")[[1]])
# פענחו את שני האינדקסים
indices <- as.numeric(strsplit(indices_input, ",")[[1]])
idx1 <- indices[1]
idx2 <- indices[2]
# TODO: כתבו את הקוד שלכם למטה
# 1. הדפיסו את האיברים במיקומים 1, 3 ו-5 באמצעות וקטור אינדקסים
# 2. הדפיסו את האיברים ממיקום 2 עד מיקום 4 באמצעות אופרטור הנקודתיים
# 3. הדפיסו את הווקטור ללא האיבר במיקום idx1 (אינדוקס שלילי)
# 4. הדפיסו את הווקטור ללא האיברים ממיקום idx1 עד מיקום idx2 (אינדוקס שלילי עם טווח)השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
4אופרטורים חלק 2
אופרטורים לוגיים (AND, OR)אופרטורים לוגיים חלק 2 (NOT)חזרה – לוגיקה פשוטהלוגיקה וקטורית חלק 1לוגיקה וקטורית חלק 27מחשבון לחלוקת החשבון
הודעת פתיחהקבלת קלט מהמשתמש2משתנים וסוגי נתונים
סוג נתונים מספריסוג נתונים שלמיםסוג נתונים של תוויםסוג נתונים לוגיבדיקת סוגי נתוניםמוסכמות למתן שמותערכים חסרים: NAסיכום – יצירת משתנים8לולאות
לולאת forלולאת whileפקודת breakהמשך (continue)סיכום – עצרתיצירת רצפים (seq, :)לולאות מקוננותסיכום – קלט דינמי3אופרטורים חלק 1
אופרטורים אריתמטייםחלוקת מספרים שלמים ומודולואופרטורי השמהחזרה – חשבון פשוטאופרטורי השוואה6קלט/פלט בסיסי
הדפסת פלטחתול כפלטפלט עם משתניםקריאת קלט באמצעות readline()יסודות המרת טיפוסיםחזרה – מחשבון גילחזרה – אמת או שקר9פונקציות
הכרזה על פונקציהארגומנטים של פונקציהערכי החזרהסיכום – פונקציית סיגמאסיכום – פונקציית אימותערכי ברירת מחדל לפרמטריםתרגלו בעצמכם: קומפיילר R אונליין