בשיעור הזה נתמקד בהכרת שפת R הבסיסית . נלמד את כללי הסינטקס ואיך להשתמשת בסוגי המבנים השונים ב R. נשים דגש יותר על מבנים בסיסיים ב R ובעיקר מנפולציות על וקטורים ומטריצות.
עד סוף השיעור תדעו:
לפני שנתחיל, מספר דברים שכדי לזכור:
אחד הדברים המועילים ביותר זה הדוקומנטציה המעולה שיש לרוב הפקודות. על מנת לקבל עזרה לגבי פקודה מסוימת:
קבלו עזרה על הפקודה class . מה זה עושה?
קבלו עזרה על הפקודה typeof . מה זה עושה?
קבלו עזרה על הפקודה str. מה זה עושה?
class מחזיר את סוג האובייקט
typeof מחזיר את סוג ערך האובייקט
str מראה את מבנה האובייקט
הערכים ב R מתחלקים לסוגים הבאים:
הערכים האלה נשמרים ביחד במבנים מהסוגים הבאים:
למעשה data frame הוא סוג מיוחד של מערך (list) עם וקטורים בגדלים שווים ובעלי שמות.
מייצרים משתנים בעזרת אופרטור ההשמה ->
(הקיצור הוא Alt -)
אפשר גם להשתמש בסימן =
אבל נוהגים לשמור את זה לצרכים אחרים
פקודת ההשמה דורסת משתנה אם הוא כבר קיים
מאגדים ערכים ביחד בעזרת הפקודה ()c
יצרו את המשתנה x שיכיל את המספר 5
בדקו בעזרת class מה יצא לכם
יצרו משתנה text1 טקסט (להשתמש בגרשיים)
יצרו וקטור numbers1 של המספרים 1 עד 5
יצרו וקטור names1 של השמות: dan, ephraim, gstat.
בידקו בעזרת str מה יצא לכם.
x <- 5
x
## [1] 5
class(x)
## [1] "numeric"
x <- " this is a text"
x
## [1] " this is a text"
numbers1 <- c(1,2,3,4,5)
numbers1
## [1] 1 2 3 4 5
או
numbers1 <-1:5
numbers1
## [1] 1 2 3 4 5
names1 <- c("dan", "ephraim", "gstat")
names1
## [1] "dan" "ephraim" "gstat"
str(names1)
## chr [1:3] "dan" "ephraim" "gstat"
צורת הכתיבה של התניה בסיסית היא:
if(condition) {do things}
ואם רוצים לעשות משהו במקרה שהתנאי לא מתקיים:
if (condition) {do things} else {do domething else}
שני הפקודות האחרונות עובדות רק על ערכים בודדים ונשתמש בהן בעיקר בקוד פתוח. אם רוצים לבדוק תנאי על וקטור שלם נשתמש בפקודה:
ifelse(condition,do if true, do if false)
ב R יש את כל הפונקציות המעגליות הרגילות (for, while , repeat) נדגים את הסינטקס של for :
for(i in range) {do something}
למשל:
# for example
for(i in 1:5) {print(1:i)}
## [1] 1
## [1] 1 2
## [1] 1 2 3
## [1] 1 2 3 4
## [1] 1 2 3 4 5
# for with if example
for(i in 1:5) {
if(i%%2 == 0){
print(i)
}
}
## [1] 2
## [1] 4
# for with if else example
for(i in 1:5) {
if(i%%2 == 0){
print('even')
} else {
print('odd')
}
}
## [1] "odd"
## [1] "even"
## [1] "odd"
## [1] "even"
## [1] "odd"
על אטרציות על ווקטורים נלמד בשיעור האחרון.
בכל סוגי המבנים ניתן לשלוף נתונים באחד מ 3 דרכים:
בחירת נתונים בווקטורים נעשית כך:
VectorName[Index]
ועבור מטריצות זה נעשה כך:
MatrixName[Row Index, Column Index]
:
()c
בהקשר של מערכים (list) יש הבדל משמעותי עם משתמשים ב [
או ב [[
לשלוף את הנתונים.
באותו שיטה ניתן להחליף ערכים:
# Create Vector
x <- c(1,2,3,4,5,6,7,8,9,10)
# Subscript
x[x>4]
## [1] 5 6 7 8 9 10
x[x==6] <- 999
x
## [1] 1 2 3 4 5 999 7 8 9 10
x <- c(1,2,3,4,5)
y <- c(6,7,8,9,10)
m1 <- cbind(x,y)
m1
## x y
## [1,] 1 6
## [2,] 2 7
## [3,] 3 8
## [4,] 4 9
## [5,] 5 10
m1[3,2] <- NA
m1
## x y
## [1,] 1 6
## [2,] 2 7
## [3,] 3 NA
## [4,] 4 9
## [5,] 5 10
# this works
summary(m1)
## x y
## Min. :1 Min. : 6.00
## 1st Qu.:2 1st Qu.: 6.75
## Median :3 Median : 8.00
## Mean :3 Mean : 8.00
## 3rd Qu.:4 3rd Qu.: 9.25
## Max. :5 Max. :10.00
## NA's :1
# this doesnt
mean(m1)
## [1] NA
# this does
mean(m1, na.rm = TRUE)
## [1] 5.222222
m1 <- cbind(m1,c("a","b","a","b","a"))
class(m1)
## [1] "matrix"
str(m1)
## chr [1:5, 1:3] "1" "2" "3" "4" "5" "6" "7" NA "9" ...
## - attr(*, "dimnames")=List of 2
## ..$ : NULL
## ..$ : chr [1:3] "x" "y" ""
new_var <- rnorm(10000)
hist(new_var)
rm(m1,names1,new_var,numbers1,x,y)