R (שפת תכנות)

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש
Gnome-edit-clear.svg ערך זה זקוק לעריכה: הסיבה לכך היא: יש צורך בהגהה ועריכה.
אתם מוזמנים לסייע ולתקן את הבעיות, אך אנא אל תורידו את ההודעה כל עוד לא תוקן הדף. אם אתם סבורים כי אין בדף בעיה, ניתן לציין זאת בדף השיחה.
R
Rlogo.png
פרדיגמות תכנות מונחה עצמים, תכנות פונקציונלי
הושפעה על ידי S
אתר http://www.r-project.org

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

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

ל-R יש ממשק שורת פקודה, אולם זמינים גם מספר ממשקי משתמש גרפיים לשימוש עם R.

היסטוריה[עריכת קוד מקור | עריכה]

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

מאפייני שפה[עריכת קוד מקור | עריכה]

הממשק של R הוא שורת פקודה, אם נקיש 2*2 לדוגמה נקבל את התשובה "4"

>2*2
>][1] 4

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

מאפינים סטטיסטיים[עריכת קוד מקור | עריכה]

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

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

גרפיקה[עריכת קוד מקור | עריכה]

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

(barplot(x

פונקציה שמייצרת דיאגרמת מקלות. חוץ מהגרפים הסטנדרטים ניתן לייצר גרפים מתואמים אישית, בעזרת הגמישות הרבה של התוכנה.

מאפיינים תכנותיים[עריכת קוד מקור | עריכה]

שפת R היא שפה מפורשת; משתמשי כותבים בדרך כלל באמצעות שורת פקודה למפרש.  אם משתמש מכניס "2+2" בשורת הפקודה ולוחץ "Enter", המחשב מגיב "4" כפי שרואים בדוגמה:

> 2+2
[1] 4

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

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

דוגמאות קוד[עריכת קוד מקור | עריכה]

דוגמה 1 - תחביר בסיסי[עריכת קוד מקור | עריכה]

הדוגמאות הבאות ממחישות את התחביר הבסיסי של השפה, ואת השימוש בממשק שורת הפקודה.

בשפת R אופרטור ההשמה המועדף ‏[2][3][4][5] הוא חץ המורכב משני תווים ״->״, אף על פי שניתן להשתמש גם ב-״=״‏[6].

> 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 6
3.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.9478
F-statistic: 91.88 on 1 and 4 DF, p-value: 0.000662
 
> par(mfrow=c(2, 2)) # 2x2 בקשה לגרף בממדים
> plot(lm_1) # גרף דיאגנוסטי של מודל הרגרסיה

גרפים דיאגנוסטיים שנוצרו ע״י הפונקציה ‏"plot.Im()". כולל סימונים מתמטיים בשמות הצירים.

דוגמה 2[עריכת קוד מקור | עריכה]

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

מטריצת פרצופים רנדומליים

דוגמה 3 - שימוש בספריות חיצוניות[עריכת קוד מקור | עריכה]

קוד קצר המחשב קבוצת מנדלברוט לאורך 20 האיטרציות הראשונות של המשוואה z = z² + c עבור קבועים מרוכבים שונים 'c'. דוגמה זו ממחישה את הדברים הבאים:

  • שימוש בספריות חיצוניות הפותחו ע״י הקהילה, במקרה הזה שימוש בספרית caTools
  • טיפול במספרים מרוכבים
  • שימוש במערכים רב ממדיים בתור טיפוסים בסיסיים, ראה משתנים C, Z ו-X.
library(caTools) # write.gif חבילה חיצונית המספקת את הפונקציה 
jet.colors <- colorRampPalette(c("#00007F", "blue", "#007FFF", "cyan", "#7FFF7F",
 "yellow", "#FF7F00", "red", "#7F0000"))
m <- 1000 # הגדרת גודל
C <- complex( real=rep(seq(-1.8,0.6, length.out=m), each=m ),
 imag=rep(seq(-1.2,1.2, length.out=m), m ) )
C <- matrix(C,m,m) # צור מחדש כמטריצה ריבועית של מספרים מרוכבים
Z <- 0 # לאפס Z אתחל את
X <- array(0, c(m,m,20)) # אתחל מערך תלת ממדי עבור הפלט
for (k in 1:20) { # לולאה עם 20 איטרציות
 Z <- Z^2+C # נוסחת הנסיגה המרכזית
 X[,,k] <- exp(-abs(Z)) # שמור את התוצאות
}
write.gif(X, "Mandelbrot.gif", col=jet.colors, delay=800)

״Mandelbrot.gif" - גרפיקה הנוצרה בשפת R ב-14 שורות קוד

דוגמה 4 - פונקציות[עריכת קוד מקור | עריכה]

קלות יצירת הפונקציות ע״י המשתמש היא אחת מנקודות החוזקה של R. אובייקטים נשארים מקומיים לפונקציה, ויכולים להיות מוחזרים בתור כל טיפוס‏[7] להלן דוגמה של מבנה של פונקציה:

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

אבני דרך חשובות[עריכת קוד מקור | עריכה]

  • גרסה 0.16 – זוהי גרסת אלפא האחרונה שפותחה ברובה על ידי "איחקה וג'נטלמן" (Ihaka and Gentleman). מרבית מהפונקציונליות של "הספר הלבן" יושמה כאן. רשימת התפוצה החלה ב 01/04/97.
  • גרסה 0.49 – 23/04/1997. זוהי גרסת המקור הזמינה הקדומה ביותר, היא מתקמפלת על מספר מוגבל של פלטפורמות UNIX למיניהן. CRAN החלה בגרסה זו עם 3 מראות שאחסנו 12 חבילות. גרסאות אלפא של R עבור ווינדוס ומקינטוש נהיו זמינות זמן קצר לאחר תאריך זה.
  • גרסה 0.60 – 05/12/1997. R נהיית חלק רשמי מפרויקט גנו. הקוד מאוחסן ומתוחזק ב־CVS.
  • גרסה 1.0.0 – 29/02/2000 .נחשבת, על ידי מפתחיה, כיציבה מספיק לשימוש לציבור הרחב.
  • גרסה 1.4.0 – שיטות S4 נכנסות לשימוש והגרסה הראשונה עבור Mac OS X נכנסת לשימוש זמן קצר לאחר מכן.
  • גרסה 2.0.0 – 04/10/2004. נכנסה לשימוש "העלה איטית" שאפשרה העלאה מהירה של מידע עם הוצאה מינימלית של זיכרון מערכת.
  • גרסה 2.1.0 – תמיכה בקידוד UTF-8 ותחילתה של הבינלאומיות וההתאמה לשפות שונות.
  • גרסה 2.11.0 – 22/04/2010. החלה תמיכה למערכות הפעלה וינדוס 64 ביט.
  • גרסה 2.13.0 – 14/04/2011. הוספת יישום חדש למהדר שמאפשר להאיץ פונקציות על ידי המרתן לבייט קוד.
  • גרסה 2.14.0 – 31/04/2011. הוספו namespaces עבור חבילות. הוספה חבילה מקבילה חדשה.
  • גרסה 2.15.0 – 30/03/2012. פונקציות איזון העלה חדשות.
  • גרסה 3.0.0 – 03/04/2013. תמיכה בערכי אינדקס גדולים מ 31^2 במערכות 64 ביט.

ממשקי משתמש גרפיים וסביבות פיתוח משולבת[עריכת קוד מקור | עריכה]

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

הערות שוליים[עריכת קוד מקור | עריכה]

  1. ^ שפת S באתר מעבדות בל
  2. ^ R Development Core Team, ‏‏Writing R Extensions
  3. ^ ‏ Google's R Style Guide
  4. ^ Wickham, Hadley ‏ ‏Style Guide
  5. ^ Bengtsson, Henrik (January 2009) ‏‏R Coding Conventions (RCC) - a draft
  6. ^ R Development Core Team, ‏‏ Assignments with the = Operator
  7. ^ Kabacoff, Robert (2012) ‏‏Quick-R: User-Defined Functions