אריתמטיקה של וקטורים ומחזוריות
חלק מהיחידה יסודות במסלול ה-R של Coddy. שיעור 69 מתוך 78.
כשמבצעים פעולות חשבון בין שני וקטורים באותו אורך, R מחילה את הפעולה על כל איבר בנפרד:
a <- c(1, 2, 3)
b <- c(10, 20, 30)
print(a + b)פלט:
[1] 11 22 33אבל מה קורה כאשר לאורכי הווקטורים יש אורכים שונים? ב-R נעשה שימוש בהתנהגות שנקראת מחזוריות. הווקטור הקצר יותר חוזר על עצמו כדי להתאים לאורך של הווקטור הארוך יותר:
numbers <- c(1, 2, 3, 4, 5, 6)
multiplier <- c(10, 100)
print(numbers * multiplier)פלט:
[1] 10 200 30 400 50 600כאן, נעשה שימוש חוזר ב־multiplier כדי להפוך אותו ל־c(10, 100, 10, 100, 10, 100) לפני הכפל. הדבר שימושי במיוחד כשעובדים עם ערך יחיד:
prices <- c(10, 20, 30)
print(prices * 1.1)פלט:
[1] 11 22 33הערך היחיד 1.1 משוכפל כדי להתאים לאורך של prices. יש להיזהר כשאורך הווקטור הארוך יותר אינו כפולה של אורך הווקטור הקצר יותר, מכיוון ש-R עדיין יבצע את הפעולה, אך עשוי להציג אזהרה על שכפול חלקי.
אתגר
קלתקבלו שתי שורות קלט:
- רשימת מספרים מופרדים בפסיקים המייצגים ערכי בסיס (למשל,
10,20,30,40,50,60) - רשימת מכפילים מופרדים בפסיקים (למשל,
2,5)
באמצעות אריתמטיקה של וקטורים ומחזור:
- צרו וקטור מספרי מערכי הבסיס
- צרו וקטור מספרי מהמכפילים
- הכפילו את ערכי הבסיס במכפילים (R תחזור על הווקטור הקצר יותר)
- הדפיסו את תוצאת הכפל
- הוסיפו
100לכל איבר בערכי הבסיס המקוריים (מחזור של ערך יחיד) - הדפיסו את תוצאת החיבור
- החסירו את וקטור המכפילים מווקטור ערכי הבסיס
- הדפיסו את תוצאת החיסור
לדוגמה, אם הקלט הוא:
5,10,15,20,25,30
3,7הפלט אמור להיות:
[1] 15 70 45 140 75 210
[1] 105 110 115 120 125 130
[1] 2 3 12 13 22 23הסבר:
- כפל: המכפילים
c(3, 7)חוזרים במחזור ל-c(3, 7, 3, 7, 3, 7), והתוצאה היא5*3, 10*7, 15*3, 20*7, 25*3, 30*7 - חיבור: הערך היחיד
100חוזר במחזור כדי להתווסף לכל איבר - חיסור: המכפילים חוזרים במחזור שוב, והתוצאה היא
5-3, 10-7, 15-3, 20-7, 25-3, 30-7
נסו בעצמכם
# קראו את הקלט
con <- file("stdin", "r")
base_input <- suppressWarnings(readLines(con, n = 1))
multipliers_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# המירו את הערכים המופרדים בפסיקים לווקטורים מספריים
base_values <- as.numeric(strsplit(base_input, ",")[[1]])
multipliers <- as.numeric(strsplit(multipliers_input, ",")[[1]])
# TODO: כתבו את הקוד שלכם למטה
# 1. הכפילו את base_values ב-multipliers (מִחזור הערכים יתבצע אוטומטית)
# 2. הדפיסו את תוצאת הכפל
# 3. הוסיפו 100 לכל איבר ב-base_values
# 4. הדפיסו את תוצאת החיבור
# 5. החסירו את multipliers מ-base_values
# 6. הדפיסו את תוצאת החיסורהשיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
4אופרטורים חלק 2
אופרטורים לוגיים (AND, OR)אופרטורים לוגיים חלק 2 (NOT)חזרה – לוגיקה פשוטהלוגיקה וקטורית חלק 1לוגיקה וקטורית חלק 27מחשבון לחלוקת החשבון
הודעת פתיחהקבלת קלט מהמשתמש2משתנים וסוגי נתונים
סוג נתונים מספריסוג נתונים שלמיםסוג נתונים של תוויםסוג נתונים לוגיבדיקת סוגי נתוניםמוסכמות למתן שמותערכים חסרים: NAסיכום – יצירת משתנים8לולאות
לולאת forלולאת whileפקודת breakהמשך (continue)סיכום – עצרתיצירת רצפים (seq, :)לולאות מקוננותסיכום – קלט דינמי3אופרטורים חלק 1
אופרטורים אריתמטייםחלוקת מספרים שלמים ומודולואופרטורי השמהחזרה – חשבון פשוטאופרטורי השוואה6קלט/פלט בסיסי
הדפסת פלטחתול כפלטפלט עם משתניםקריאת קלט באמצעות readline()יסודות המרת טיפוסיםחזרה – מחשבון גילחזרה – אמת או שקר9פונקציות
הכרזה על פונקציהארגומנטים של פונקציהערכי החזרהסיכום – פונקציית סיגמאסיכום – פונקציית אימותערכי ברירת מחדל לפרמטריםתרגלו בעצמכם: קומפיילר R אונליין