R (שפת תכנות)

היסטוריה

R היא מימוש חופשי של סביבת תכנות בשם S. מערכת S נוצרה בשנת 1976 במעבדות בל כתוכנה לחישובים מתמטיים. מטרתה הבסיסית הייתה לאפשר התממשקות נוחה לספריות תוכנה שכתובות בשפת פורטרן (ובהמשך גם C ושפות נוספות), לקבל משם נתונים ולהציג אותם בצורה נוחה

מאפייני שפה

הממשק של R הוא שורת פקודה, אם נקיש 2*2 לדוגמה נקבל את התשובה "4" 
 >2*2
 [1] 4
R יכול לטפל בכמה סוגי מבני נתונים, ובהם: סקלרים, וקטורים, מטריצות ורשימות.

מאפיינים סטטיסטיים

ל-R יש מבחר של טכניקות סטטיסטיות, הכוללות מודלים ליניאריים ולא ליניאריים, מבחנים סטטיסטיים, ניתוח אשכולות ועוד.
R, בהיותה שפת תכנות, מאפשרת למשתמש לכתוב פונקציות בעצמו. R ניתנת להרחבה בקלות על ידי פונקציות והרחבות, וקהילת R ידועה בתרומה הפעילה שלה בכל הקשור לחבילות. יש מספר שינויים חשובים, אבל רוב הקוד שנכתב עבור S רץ מבלי צורך לשנותו. פונקציות סטנדרטיות רבות של R נכתבות ב-R עצמה, והדבר מקל על המשתמשים לעקוב אחר בחירת האלגוריתמים. עבור משימות הדורשות חישוב אינטנסיבי, אפשר לקשר ולקרוא בזמן הריצה לקוד C,‏ ++C ו-Fortran. משתמשים מתקדמים יכולים לכתוב ב-C++, Java, .NET, Python ו-C כדי להפעיל ישירות אובייקטים של R. שפת התכנות ניתנת להרחבה בצורה משמעותית על ידי שימוש בחבילות של משתמשים עבור פונקציות ספציפיות או תחומי מחקר ספציפיים. בעקבות העובדה ש-R הושפעה מ-S, ל-R יש תכונות של תכנות מונחה-עצמים יותר מאשר לרוב שפות התכנות לחישוב סטטיסטי. יתרון אחר של R הוא גרפים סטטיים. היא יכולה להפיק גרפים באיכות להוצאה לאור, הכוללים סימנים מתמטיים. אפשר גם ליצור גרפים דינמיים ואינטראקטיביים באמצעות חבילות חיצוניות. ל-R יש פורמט תיעוד הדומה ל-Latex, שנועד כדי לספק תיעוד מקיף, כולל תיעוד מקוון במספר פורמטים וכולל תיעוד בעותק קשיח.

גרפיקה

אחד היתרונות הבולטים של R הוא הגרפיקה, ניתן לייצר את הגרפים הסטנדרטים בעזרת פונקציות מובנות. למשל, הפונקציה
 barplot(x)
מייצרת דיאגרמת מקלות. גמישותה הרבה של התוכנה מאפשרת לייצר גרפים מתואמים אישית, בנוסף לגרפים מסוגים סטנדרטיים.

מאפיינים תכנותיים

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

דוגמה 1 - תחביר בסיסי

הדוגמאות הבאות ממחישות את התחביר הבסיסי של השפה, ואת השימוש בממשק שורת הפקודה.
בשפת R אופרטור ההשמה המועדף הוא חץ המורכב משני תווים ״->״, אף על פי שניתן להשתמש גם ב-״=״.
> x <- c(1,2,3,4,5,6) # יצירת אוסף סדור - וקטור> y <- x^2 # x העלה בריבוע את האיברים של> print(y) # y הדפס את וקטור[1] 1 4 9 16 25 36> mean(y) # חשב ממוצע חשבוני של הווקטור - התוצאה היא סקלר[1] 15.16667> var(y) # חשב את השונות של המדגם[1] 178.9667> lm_1 <- lm(y ~ x) # "y = f(x)" או "y = B0 + (B1 * x)” התאם מודל רגרסיה לינארית 
 # lm_1 שמור את התוצאות בתור> print(lm_1) # הדפס את המודל הלינארי 

Call:
lm(formula = y ~ x)

Coefficients:(Intercept) x
 -9.333 7.000> summary(lm_1) # חשב והדפס סטטיסטיקות עבור ההתאמה
 # lm_1 של אובייקט המודל הלינארי 

Call:
lm(formula = y ~ x)

Residuals:1 2 3 4 5 63.3333 -0.6667 -2.6667 -2.6667 -0.6667 3.3333

Coefficients:
 Estimate Std. Error t value Pr(>|t|)(Intercept) -9.3333 2.8441 -3.282 0.030453 *
x 7.0000 0.7303 9.585 0.000662 ***---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.055 on 4 degrees of freedom
Multiple R-squared: 0.9583, Adjusted R-squared: 0.9478F-statistic: 91.88 on 1 and 4 DF, p-value: 0.000662> par(mfrow=c(2, 2)) # 2x2 בקשה לגרף בממדים> plot(lm_1) # גרף דיאגנוסטי של מודל הרגרסיה

דוגמה 2

install.packages(TeachingDemos)library(TeachingDemos) 
set.seed(17)
faces(matrix(sample(1:1000,128,),16,8),main="random faces")

דוגמה 4 - פונקציות

קלות יצירת הפונקציות ע״י המשתמש היא אחת מנקודות החוזקה של R. אובייקטים נשארים מקומיים לפונקציה, ויכולים להיות מוחזרים בתור כל טיפוס להלן דוגמה של מבנה של פונקציה:
functionname <- function(arg1, arg2, ... ){ # הצהרה על שם הפונקציה והארגומנטים שלה
statements # גוף הפונקציהreturn(object) # האובייקט המוחזר מן הפונקציה}

sumofsquares <- function(x){ # פונקציה הנוצרה ע״י המשתמש
 return(sum(x^2)) # x החזר את סכום הריבועים של איברי הווקטור}}> sumofsquares(1:3)[1] 14

ממשקי משתמש גרפיים וסביבות פיתוח משולבת

ישנם מספר ממשקים גרפיים נפוצים כגון : RStudio, Java GUI for R, Rattle GUI R Commander . 
מרביתם מכילים גרסאות שמתאימות לרוב מערכות ההפעלה הסטנדרטיות .
בנוסף ישנם עורכי טקסט וסביבות פיתוח משולבות שתומכות ב-R כגון :ConTEXT, LyX, jEdit, ++Sublime Text, TextMate, Notepad.

שפות סקריפט

ניתן לגשת ל-R משפות תכנות שונות כגון Python, Perl, Ruby, F# & Julia. שפת R משתמשת בהרחבת PL/R אשר יכולה לשמש במקביל או במקום לשפה PL/pgSQL במערכות ניהול הנתונים PostgreSQL ו-Greenplum. מערכת ניהול הנתונים MonetDB מאפשרת לכרוך את הקוד ב-R בדומה לPL/R.