R (שפת תכנות)

מתוך ויקיפדיה, האנציקלופדיה החופשית
יש לערוך ערך זה. הסיבה היא: יש צורך בהגהה ועריכה.
אתם מוזמנים לסייע ולערוך את הערך. אם לדעתכם אין צורך בעריכת הערך, ניתן להסיר את התבנית. ייתכן שתמצאו פירוט בדף השיחה.
יש לערוך ערך זה. הסיבה היא: יש צורך בהגהה ועריכה.
אתם מוזמנים לסייע ולערוך את הערך. אם לדעתכם אין צורך בעריכת הערך, ניתן להסיר את התבנית. ייתכן שתמצאו פירוט בדף השיחה.
R
פרדיגמות תכנות מונחה-עצמים, תכנות פונקציונלי
תאריך השקה אוגוסט 1993 עריכת הנתון בוויקינתונים
מתכנן Ross Ihaka and Robert Gentleman
מפתח R Core Team
הושפעה על ידי S
רישיון GPL-2.0 עריכת הנתון בוויקינתונים
http://www.r-project.org
לעריכה בוויקינתונים שמשמש מקור לחלק מהמידע בתבנית

R היא שפת תכנות וסביבת עבודה בקוד פתוח. נכון לאוגוסט 2023, היא ממוקמת במקום 16 במדד TIOBE.[1]

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

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

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

R היא מימוש חופשי של סביבת תכנות בשם S. מערכת S נוצרה בשנת 1976 במעבדות בל כתוכנה לחישובים מתמטיים[3]. מטרתה הבסיסית הייתה לאפשר התממשקות נוחה לספריות תוכנה שכתובות בשפת פורטרן (ובהמשך גם 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 אופרטור ההשמה המועדף[4][5][6][7] הוא חץ המורכב משני תווים ״->״, אף על פי שניתן להשתמש גם ב-״=״[8].

> 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)

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

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

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

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

דוגמה 5 - שרשור ומיעוט חבילות[עריכת קוד מקור | עריכה]

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

library(tidyverse)

# read a csv file
read_csv("mydata.csv") %>% 

  # rename the 5th column as "Open"; rename the column "Close_value_in_dollars" as "Close" 
  rename(Open = 5, Close = "Close_value_in_dollars") %>% 
  
  # make a new variable which is only date from the datetime variable DateTime
  mutate(date = parse_date(DateTime)) %>% 
  
  # only use data beginning in 2022
  filter(date > as.Date("2022-01-01")) %>% 
  
  # for each unique value of Stock filter the data to only use the date with maximum Close value
  group_by(Stock) %>% 
  filter(Close == max(Close)) %>% 
  
  # create a new column with the delta between the close and open price
  mutate(DayDelta = Close - Open)

דוגמה 6 - פיתוח אפליקציות אינטראקטיביות[עריכת קוד מקור | עריכה]

ספריית Shiny ב R מיועדת לפיתוח אפליקציות רשת אינטראקטיבות בהתבסס על קוד R, ללא צורך בהכרות עם HTML, CSS, או JavaScript.[10]

דוגמאות לאפשרות של ספריה זו היא כתיבה, באמצעות קוד R בלבד, של משחקי מחשב[11], המחשת נתוני קורונה עולמיים[12] או השוואה בין קופות גמל המסתמכת על נתוני גמלנט[13]. יכולות אלו משמשות בין השאר עיתונים גדולים, דוגמת הניו יורק טיימס והגארדין להמחשת נתונים באופן אינטראקטיבי.[14]

library(shiny)

ui <- fluidPage(
  titlePanel("Simple Shiny App"),
  sidebarLayout(
    sidebarPanel(
      numericInput("obs", "Number of observations:", 100),
      actionButton("generate", "Generate")
    ),
    mainPanel(
      plotOutput("histogram")
    )
  )
)

server <- function(input, output) {
  observeEvent(input$generate, {
    data <- rnorm(input$obs)
    output$histogram <- renderPlot({
      hist(data, main = "Generated Histogram")
    })
  })
}

shinyApp(ui = ui, server = server)

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

  • גרסה 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 ביט.

כנס useR!‎[עריכת קוד מקור | עריכה]

בכל שנה מתקיים כנס רשמי למשתמשי R בשם useR! האירוע הראשון התקיים במאי 2004 בווינה, אוסטריה, ונקרא "useR! 2004". מלבד 2005, הכנס התקיים בכל שנה מאז, באירופה ובצפון אמריקה לסירוגין. הכנסים שהתקיימו הם:

  • useR! 2006 - וינה, אוסטריה
  • useR! 2007 - אמס, איווה, ארצות הברית
  • useR! 2008 - דורטמונד, גרמניה
  • useR! 2009 - רן, צרפת
  • useR! 2010 - גטיסבורג, מרילנד, ארצות הברית
  • useR! 2011 - קובנטרי, בריטניה
  • useR! 2012 - נאשוויל, טנסי, ארצות הברית
  • useR! 2013 - אלבסטה, ספרד
  • useR! 2014 - לוס אנג'לס, קליפורניה, ארצות הברית
  • useR! 2015 - אולבורג, דנמרק

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

ישנם מספר ממשקים גרפיים נפוצים כגון 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.

קישורים חיצוניים[עריכת קוד מקור | עריכה]

ויקישיתוף מדיה וקבצים בנושא R בוויקישיתוף
  1. R-project: האתר רשמי של פרויקט R
  2. R books: רשימה מקיפה של ספרים הקשורים ל־R
  3. R-bloggers: אתר חדשות יומי של R המכיל מאמרים והדרכות שנתרמו על ידי מעל ל-450 בלוגרים
  4. R seek: ממשק מותאם למנוע החיפוש של גוגל, כדי לסייע במציאת תוצאות הקשורות לשפת R
  5. R Graph Gallery: אוסף של דוגמאות הממחישות את יכולות הגרפים והעיצוב הגרפי של R
  6. R בישראל, אתר לקהילת משתמשי R בישראל
  7. מבוא לתכנות ב-R, קורס ביסודות השפה בעברית.

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

  1. ^ TIOBE Index, TIOBE (באנגלית אמריקאית)
  2. ^ Wayback Machine, web.archive.org
  3. ^ שפת S, באתר מעבדות בל (ארכיון)
  4. ^ R Development Core Team, ‏‏Writing R Extensions
  5. ^ ‏ Google's R Style Guide
  6. ^ Wickham, Hadley ‏ ‏Style Guide
  7. ^ Bengtsson, Henrik (January 2009) ‏‏R Coding Conventions (RCC) - a draft
  8. ^ R Development Core Team, ‏‏ Assignments with the = Operator
  9. ^ Kabacoff, Robert (2012) ‏‏Quick-R: User-Defined Functions
  10. ^ Shiny, www.rstudio.com (באנגלית)
  11. ^ Paul Simmering, Shiny - R&D Business Game, shiny.posit.co, ‏2019-05-31 (באנגלית)
  12. ^ Edward Parker, Shiny - COVID-19 tracker, shiny.posit.co, ‏2020-03-18 (באנגלית)
  13. ^ Hovav's GemelNet Discovery, numbersguys.com
  14. ^ Nick Evershed, Josh Nicholas, Adam Morton, Tracking Australia’s progress on the climate crisis and the consequences of global heating, the Guardian (באנגלית)