Menu

תחביר R: היסודות ב-5 דקות

הליבה של תחביר R: השמה עם <-, ביטויים והדפסה אוטומטית, קריאות לפונקציות עם ארגומנטים בעלי שם, והכלל שלפיו הכול וקטור.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

ביטויים והדפסה אוטומטית

R היא שפת ביטויים: כמעט כל שורה שכותבים מפיקה ערך. בקונסולה, ביטוי שמוקלד לבדו מחושב והערך שלו מודפס אוטומטית, בלי צורך ב-print():

לפני כל תוצאה מופיע [1]: זו R שמציינת את המיקום של הערך הראשון שמוצג, רמז ראשון לכך ש-R חושבת בווקטורים (עוד על כך בהמשך). להדפסה האוטומטית יש מלכוד שכדאי להכיר כבר ביום הראשון: היא חלה על ביטויים חשופים ברמה העליונה. אותו ביטוי בתוך גוף של פונקציה או בתוך לולאת for לא מדפיס כלום, ולכן סקריפטים משתמשים ב-cat() או ב-print() מפורשים לפלט שחייבים לראות.

השמה: החץ

אופרטור ההשמה של R הוא <-, חץ שמצביע על השם שמקבל את הערך:

קראו את radius <- 5 כ"radius מקבל 5". כן, גם = עובד להשמה ברמה העליונה, וכן, מתחילים שואלים למה מישהו מקליד שני תווים במקום אחד. התשובה היא מוסכמה עם שיניים: כל מדריכי הסגנון הגדולים, התיעוד של R הבסיסית, ולמעשה כל קוד R שתקראו אי פעם משתמשים ב-<- להשמה, ושומרים את = לתפקיד אחד מסוים: מתן שמות לארגומנטים בתוך קריאות לפונקציות (בסעיף הבא). כשמקפידים על המוסכמה, שתי הפעולות נראות שונות לעין. ב-RStudio, Alt+- (Option+- ב-macOS) מקליד את החץ בשבילכם.

שימו לב שהשמה לא מודפסת אוטומטית: area <- 78.5 שומר את הערך בשקט. לכן הקטע למעלה צריך את ה-print().

רגישות לאותיות גדולות וקטנות

R רגישה לחלוטין לאותיות גדולות וקטנות, גם בשמות שאתם יוצרים וגם בשמות שהשפה מספקת:

שני משתנים שונים. באותו אופן, mean() היא פונקציה ו-Mean() לא קיימת. כש-R מקבלת את פניכם עם object 'x' not found או could not find function, בדקו את האותיות הגדולות לפני כל דבר אחר: זו השגיאה הנפוצה ביותר אצל מתחילים.

קריאות לפונקציות וארגומנטים בעלי שם

קוראים לפונקציות עם סוגריים, והארגומנטים מופרדים בפסיקים. אפשר להתאים ארגומנטים לפי מיקום, לפי שם, או בשילוב:

הקריאה ל-seq() מדגימה את תחביר הארגומנטים בעלי השם של R, וכאן = מצדיק את קיומו: בתוך קריאה, name = value נותן תווית לארגומנט. ארגומנטים בעלי שם פוטרים אתכם מלזכור את סדר הפרמטרים, והם הופכים קריאות למתעדות את עצמן; seq(0, 100, 25) עובד בדיוק אותו דבר אבל אומר לקורא פחות. המוסכמה המקובלת: העבירו את הארגומנט הראשון (בדרך כלל הנתונים) לפי מיקום, ותנו שמות לשאר.

עזרה על כל פונקציה נמצאת במרחק הקשה אחת: ?seq בקונסולה פותח את התיעוד שלה.

הכול וקטור

הרעיון שגורם ל-R להרגיש שונה משפות אחרות: אין מספרים בודדים חשופים. אפילו 5 הוא וקטור באורך אחד, ופעולות חלות איבר אחר איבר על וקטורים שלמים:

אין לולאה בשום מקום, ובכל זאת כל איבר הומר. ברוב השפות אלה שלוש איטרציות של לולאת for; ב-R זו אריתמטיקה. זו וקטוריזציה, והיא מעצבת הכול: אופרטורי השוואה, פונקציות של מחרוזות ופונקציות מתמטיות עובדים כולם כך. זו הסיבה שב-R אידיומטית יש הרבה פחות לולאות ממה שהייתם מצפים; הסיפור המלא נמצא ב-וקטורים.

סוגריים מסולסלים ובלוקים

גופים של כמה שורות, עבור if, לולאות ופונקציות, מקובצים בסוגריים מסולסלים {}:

שני דברים לשים לב אליהם. התנאי נמצא בסוגריים, וזה if רגיל, לא if: ולא if ... then. ובניגוד ל-Python, להזחה אין שום משמעות ב-R: הסוגריים המסולסלים מגדירים את הבלוק, וההזחה היא בשביל בני אדם. דילוג על סוגריים מסולסלים בשורה אחת הוא חוקי, אבל מקור קלאסי לבאגים בזמן עריכה; פשוט השתמשו בהם תמיד.

רווחים ונקודה-פסיק

R מתעלמת מרווחים עודפים, וירידת שורה מסיימת פקודה, בלי צורך בנקודה-פסיק:

הפיצול לשתי שורות עובד כי שורה 3 מסתיימת ב-+, ולכן R יודעת שהביטוי לא הסתיים. זה הכלל היחיד שצריך לזכור כששוברים שורות ארוכות: שברו אחרי אופרטור או פסיק, אף פעם לא לפניו, אחרת R תתייחס לשורה הראשונה כשלמה. נקודה-פסיק קיימת רק כדי לדחוס שתי פקודות לשורה אחת (a <- 1; b <- 2): חוקי, לא מומלץ, וקל להימנע ממנו.

סגנון: איך כותבים קוד R

מעבר לדקדוק, ל-R יש מוסכמות קהילתיות חזקות (שמעוגנות במדריך הסגנון של tidyverse, שרוב האקוסיסטם עוקב אחריו):

  • <- להשמה, = רק לארגומנטים בתוך קריאות.
  • שמות ב-snake_case: monthly_revenue, לא monthlyRevenue ולא monthly.revenue. נקודות חוקיות בשמות ב-R, אבל עדיף להימנע מהן: הן מתנגשות בדפוס שמות שהמנגנונים הפנימיים של R משתמשים בו.
  • רווחים סביב אופרטורים (x <- a * 2, לא x<-a*2) ואחרי פסיקים.
  • הזחה של ארבעה רווחים בתוך סוגריים מסולסלים (יש צוותים שמשתמשים בשניים; בחרו אחד והקפידו עליו).
  • פקודה אחת בכל שורה.

המפרש לא אוכף אף אחד מאלה. כל מי שקורא את הקוד שלכם אוכף את כולם. חלק מתן השמות של הסיפור הזה ממשיך ב-משתנים.

מה לקחת מכאן

  • R מחשבת ביטויים ומדפיסה אוטומטית ביטויים חשופים בקונסולה, אבל לא בתוך פונקציות או לולאות.
  • בצעו השמה עם <- ("מקבל"); השתמשו ב-= רק כדי לתת שמות לארגומנטים בקריאות לפונקציות.
  • R רגישה לחלוטין לאותיות גדולות וקטנות: טעויות באותיות גדולות גורמות לרוב שגיאות ה-"not found" בהתחלה.
  • הכול וקטור, ופעולות חלות איבר אחר איבר: c(1, 2, 3) * 2 הוא 2 4 6, בלי לולאה.
  • סוגריים מסולסלים מגדירים בלוקים, ירידת שורה מסיימת פקודות, ו-snake_case יחד עם מוסכמות הרווחים גורמים לקוד שלכם להיקרא כמו של כולם.

הבא בתור: הערות. איך מוסיפים הערות לקוד R, ומה עושים עם זה שאין ב-R תחביר של הערת בלוק.

שאלות נפוצות

מה המשמעות של <- ב-R?

<- הוא אופרטור ההשמה של R: x <- 5 שומר את הערך 5 תחת השם x. קראו אותו כ'מקבל'. גם = מבצע השמה ברמה העליונה, אבל המוסכמה בקהילה, שכל מדריכי הסגנון הגדולים אוכפים, היא <- להשמה ו-= רק למתן שמות לארגומנטים בתוך קריאות לפונקציות.

האם R רגישה לאותיות גדולות וקטנות?

כן, לגמרי. total, Total ו-TOTAL הם שלושה שמות שונים, וקריאה ל-Mean(x) במקום mean(x) היא שגיאה, לא אזהרה. שגיאה מסוג 'could not find function' או 'object not found' היא פעמים רבות סתם טעות הקלדה באותיות גדולות.

האם צריך נקודה-פסיק ב-R?

לא. ירידת שורה מסיימת פקודה. נקודה-פסיק נחוצה רק כדי לדחוס שתי פקודות לשורה אחת (a <- 1; b <- 2), ומדריכי סגנון ממליצים להימנע מזה בכל מקרה. כתבו פקודה אחת בכל שורה ותשכחו מנקודה-פסיק.

מה המשמעות של כך ש-R היא וקטורית?

הפעולות הבסיסיות של R עובדות על וקטורים שלמים בבת אחת. c(1, 2, 3) * 2 נותן 2 4 6: הכפל חל על כל איבר בלי לולאה. רוב הקוד שבשפה אחרת היה לולאת for הוא ב-R ביטוי יחיד.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל