Menu
Coddy logo textTech

חיתוך וקטורים ואינדוקס

חלק מהיחידה יסודות במסלול ה-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)].

challenge icon

אתגר

קל

תקבלו שתי שורות קלט:

  1. רשימת מספרים המופרדים בפסיקים (לדוגמה, 100,200,300,400,500,600,700)
  2. שני אינדקסים המופרדים בפסיק ומייצגים טווח שיש להוציא (לדוגמה, 2,5)

קוד הפתיחה כבר קורא את הקלט ויוצר את המערך המספרי. הדפיסו בדיוק ארבע שורות, לפי הסדר הזה:

  1. הדפיסו את האיברים במיקומים 1, 3 ו-5 באמצעות מערך של אינדקסים
  2. הדפיסו את האיברים ממיקום 2 עד מיקום 4 באמצעות אופרטור הנקודתיים
  3. הדפיסו את המערך ללא האיבר שבאינדקס הראשון שהתקבל (באמצעות אינדוקס שלילי)
  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 (אינדוקס שלילי עם טווח)
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: קומפיילר R אונליין