به نام خدا


مقدمات R


نصب کردن R


ابتدا R را از اینجا دانلود کنید.

نصب کردن R بر روی Jupyter Notebook:
بعد از نصب‌کردن R ، آن را اجرا کنید.
در کنسولِ آن ، دستور زیر را اجرا کنید تا پکیج های مورد نیاز دانلود و نصب شود.
In [ ]:
install.packages(c('repr', 'IRdisplay', 'evaluate', 'crayon', 'pbdZMQ', 'devtools', 'uuid', 'digest'))
سپس با استفاده از پکیج devtools ، پکیج IRkernel را نصب می‌کنیم :
دستور زیر را اجرا کنید.
In [ ]:
devtools::install_github('IRkernel/IRkernel')
و حال باید R kernel را برای Jupyter نمایان کنیم.
In [ ]:
IRkernel::installspec()


نصب R Studio :
R studio یک محیط گرافیکی برای کار باR می‌باشد. برای نصب آن را از اینجا دانلود کنید.


پکیج‌های R
مجموعه دستورات مفید در ارتباط با پکیج‌ها :
In [ ]:
## Installing a package
install.packages("package-name")

## Removing a package
remove.packages("")

## Installed packages that need to be updated
old.packages()

## Updating old packages
update.packages()

## Using a function from a package without loading the package 
### PackageName::function()
ggplot2::geom_point


مقدمات R

In [1]:
print("Hello World!")
[1] "Hello World!"


چاپ کردن :
فرض کنید که می‌خواهیم مقدار یک عبارت و یا متغیر را نمایش دهیم. برای این کار کافیست تا آن عبارت و یا متغیر را اجرا کرده و نتیجه چاپ می‌شود.
In [2]:
1 + 1
pi
sqrt(8)
2
3.14159265358979
2.82842712474619
همینطور از تابع ()print نیز برای چاپ کردن می‌توانیم استفاده کنیم.
In [3]:
print(pi)
[1] 3.141593
نکته‌ای که تابع ()print را متمایز می کند این است که هر شی (Object) را که در R داریم در فرمت درست چاپ می‌کند.
به عنوان مثال در زیر یک ماتریس را چاپ می‌کنیم. (درباره‌ی داده‌ساختار‌ها در جلوتر صحبت خواهیم کرد.)
In [4]:
print(matrix(c(1,2,3,4),2,2))
     [,1] [,2]
[1,]    1    3
[2,]    2    4
توجه : تابع ()print در هربار تنها یک شی را چاپ می‌کند.
In [5]:
print("Pi number is equal to " , pi)
[1] "Pi number is equal to "
برای این‌کار از تابع ()cat استفاده می‌کنیم.
In [6]:
cat("Pi number is equal to", pi , "\n")
Pi number is equal to 3.141593 
تابع ()cat توانایی چاپ بردار (Vector) های ساده را نیز دارد.
In [7]:
cat("12 months of the year are" , month.name , "\n")
12 months of the year are January February March April May June July August September October November December 
(month.name و pi از جمله ثابت هایی هستند که خود R فراهم می‌کند.)


تعریف متغیر :
در R برای تعریف یک متغیر نیاز به آوردن نوع آن نمی‌باشد. کافیست از عملگر -> استفاده کنیم.
In [8]:
s <- "this is a string"
x <- 4
s
print(x)
'this is a string'
[1] 4
نکته 1 : در اسم‌گذاری شی‌ها (Objects) می‌توانید از نقطه "." نیز در نام آن‌ها استفاده‌کنید همانطور که در بالاتر دیدیم month.name اسم یک بردار در R می‌باشد.
نکته 2 : از = نیز می‌توان برای مقدار‌دهی استفاده کرد ، اما در R ، عملگر = کاربرد دیگری نیز دارد که آن مشخص کردن یک پارامتر در یک تابع می‌باشد. برای همین بهتر است از -> استفاده کنیم.
اینجا را مطالعه کنید.

با تعریف یک متغیر به این شکل ، متغیر در workspace نگه داشته می‌شود.
برای مشاهده متغیر‌ها و توابعی که در workspace ما قرار دارد از تابع ()ls استفاده می‌کنیم.
برای دریافت جزئیات از ()ls.str استفاده کنید.
In [9]:
ls()
ls.str()
a <- 4
ls()
ls.str()
  1. 's'
  2. 'x'
s :  chr "this is a string"
x :  num 4
  1. 'a'
  2. 's'
  3. 'x'
a :  num 4
s :  chr "this is a string"
x :  num 4
با استفاده از دستور ()rm می‌توانید متغیر‌ها را از workspace خود پاک کنید.
In [10]:
print("Removing x")
rm("x")
ls.str()

##Clearing the workspace
rm(list = ls())

print("The workspace now :")
ls()
[1] "Removing x"
a :  num 4
s :  chr "this is a string"
[1] "The workspace now :"


کمک گرفتن در R :
یکی از بهترین راه‌های یادگیری و کمک گرفتن ، مطالعه مستندات پکیج‌ها و توابع می‌باشد که در خود R موجود می‌باشند.

از روش‌های زیر می‌توانید این مستندات را ببینید.
In [12]:
## Documentation of installed functions
?mean

## Documentation of functions
??highchart

## Documentation of packages or functions
help("")

#### Getting help on packages
vignette("")
Warning message:
“vignette ‘’ not found”


ساخت یک بردار :
بردار‌ها از اصلی ترین قسمت‌های R می‌باشند. بردار‌ها می‌توانند شامل اعداد ، رشته‌ها یا مقادیر منطقی باشند اما نمی‌توانند به صورت ترکیبی از چند نوع باشند.
با عملگر ()c می‌توانید یک بردار بسازید.
In [13]:
c(1,3,3*pi,4+5)
c(T,F,T)
  1. 1
  2. 3
  3. 9.42477796076938
  4. 9
  1. TRUE
  2. FALSE
  3. TRUE
اگر مقادیر داده شده به ()c خود ، بردار باشند آن‌ها را باز کرده و با دیگر مقادیر ترکیب می‌کند.
In [14]:
v1 <- c(1,4,5)
v2 <- c(8,5,6)
c(2,v1,v2,0)
  1. 2
  2. 1
  3. 4
  4. 5
  5. 8
  6. 5
  7. 6
  8. 0


مقایسه دو بردار :
با مقایسه دو بردار ، R عضو به عضو دو بردار را مقایسه کرده و برداری از مقادیر منطقی True – False برمی‌گرداند.
In [15]:
v <- c(2,4,6)
u <- c(3,4,5)

u != v   # 2 != 3  4 == 4  6 != 5

v > u    # 2 < 3   4 == 4   6 > 5
  1. TRUE
  2. FALSE
  3. TRUE
  1. FALSE
  2. FALSE
  3. TRUE
همین طور :
In [16]:
u > 4
v*2 > 7
  1. FALSE
  2. FALSE
  3. TRUE
  1. FALSE
  2. TRUE
  3. TRUE


انتخاب یک یا چند عضو بردار :
بر حسب شرایط به یک یا چند روش زیر عمل می‌کنیم.

- استفاده از کروشه و انتخاب اعضا بر حسب اندیس آن‌ها. (توجه کنید که R اندیس‌ها از 1 شروع می‌شود.)
In [17]:
v <- c(0,10,20,30,7,11,23)
v[1]
0
- استفاده از اندیس های منفی به عنوان اعضای مستثنی شده.
In [18]:
v[-1]
  1. 10
  2. 20
  3. 30
  4. 7
  5. 11
  6. 23
- استفاده از برداری از اندیس‌ها برای انتخاب چند عضو
In [19]:
v[2:4]
v[c(2,3,4)]
v[-c(2,3,4)]
  1. 10
  2. 20
  3. 30
  1. 10
  2. 20
  3. 30
  1. 0
  2. 7
  3. 11
  4. 23
- استفاده از یک بردار منطقی (در بالاتر دیدیم که با اعمال عملگر‌های منطقی بر یک بردار ، خروجی یک بردار شامل مقادیر منطقی می‌باشد.)
In [20]:
v[v > 8]
v[v > median(v)]
  1. 10
  2. 20
  3. 30
  4. 11
  5. 23
  1. 20
  2. 30
  3. 23


تولید دنباله‌ای از اعداد :
- ساده‌ترین راه تولید دنباله با افزایش 1 :
In [21]:
4:9
-3:7
  1. 4
  2. 5
  3. 6
  4. 7
  5. 8
  6. 9
  1. -3
  2. -2
  3. -1
  4. 0
  5. 1
  6. 2
  7. 3
  8. 4
  9. 5
  10. 6
  11. 7
فکر می‌کنید خروجی 6:4 چیست ؟
In [22]:
6:4
  1. 6
  2. 5
  3. 4

- می‌توانید برای ایجاد دنباله‌هایی با هر مقدار افزایش و یا با طول دنباله ایجاد شده مشخص از تابع ()seq استفاده کنید.
In [23]:
seq(from = 3, to = 8, by = 2)
seq(from = 5, to = 20, length.out = 4)
seq(1,2,length.out = 5)
  1. 3
  2. 5
  3. 7
  1. 5
  2. 10
  3. 15
  4. 20
  1. 1
  2. 1.25
  3. 1.5
  4. 1.75
  5. 2

- برای ایجاد مقادیر تکراری از تابع ()rep استفاده می‌کنیم.
In [24]:
rep(2,times = 4)
  1. 2
  2. 2
  3. 2
  4. 2
In [25]:
c(1:5,seq(6,10),(1:5)+10)
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15


توابع آماری


به طور پیش‌فرض در پکیج stats در R بسیاری از توابع کارآمد آماری موجود است که در زیر به بخشی از آن‌ها می‌پردازیم.

توابع مقدماتی آماری :
In [26]:
u <- c(10:1)
u

print("Mean :")
mean(u)

print("Standard Deviation :")
sd(u)

print("Variance :")
var(u)

print("Min :")
min(u)

print("Max :")
max(u)

print("Median :")
median(u)
  1. 10
  2. 9
  3. 8
  4. 7
  5. 6
  6. 5
  7. 4
  8. 3
  9. 2
  10. 1
[1] "Mean :"
5.5
[1] "Standard Deviation :"
3.02765035409749
[1] "Variance :"
9.16666666666667
[1] "Min :"
1
[1] "Max :"
10
[1] "Median :"
5.5

و توابع توزیع‌های احتمالاتی :
In [27]:
## For a random sample of normal distribution
sample <- rnorm(n = 5, mean = 0, sd = 1)
sample
##For other distributions:
## Use    runif    for uniform sample
## Use    rbinom   for binomial sample
## ...
  1. 0.861172758910185
  2. 1.08769610477999
  3. -0.785969423909666
  4. 0.898786055818154
  5. 0.338647805517831

علاوه بر تابع بالا ، ()dnorm چگالی توزیع را و ()pnorm تابع توزیع را بر می‌گردانند.


داده‌ساختار‌ها در R



بردار‌ها :
در مورد بردار‌ها بالاتر صحبت کردیم و در این بخش تنها به چند نکته تکمیلی می‌پردازیم :
- اضافه‌کردن داده به بردار :
In [28]:
vec <- 1:6
vec

newVec <- c(vec,10,vec)
newVec

## Inserting Data into a Vector
append(vec,8:10, after = 2)
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 10
  8. 1
  9. 2
  10. 3
  11. 4
  12. 5
  13. 6
  1. 1
  2. 2
  3. 8
  4. 9
  5. 10
  6. 3
  7. 4
  8. 5
  9. 6

قانون بازیافت در R :
پیش‌تر گفتیم که در هنگام انجام اعمال محاسباتی در R بر روی بردار‌ها ، R عمل مورد نظر را بر روی تک‌تک اعضا‌ی دو بردار انجام می‌دهد.
حال اگر طول دو بردار برابر نباشد چه می‌شود ؟

در این مواقع R ، قانون بازیافت را بر روی بردار کوچک‌تر اعمال می‌کند.
یعنی دوباره از عضو اول بردار کوچک‌تر شروع می‌کند و به عنوان عضو بعدی از آن استفاده می‌کند.
In [29]:
1:6 + 1:3

## 1 2 3 4 5 6
##    +
## 1 2 3 1 2 3

c(1,2,3,10,20,30) + 1:5

## 1 2 3 10 20 30
##     +
## 1 2 3  4  5  1
  1. 2
  2. 4
  3. 6
  4. 5
  5. 7
  6. 9
Warning message in c(1, 2, 3, 10, 20, 30) + 1:5:
“longer object length is not a multiple of shorter object length”
  1. 2
  2. 4
  3. 6
  4. 14
  5. 25
  6. 31

ماتریس‌ها
یکی از داده‌ساختار‌ های موجود در R ماتریس‌ها می‌باشند.
In [30]:
## Create a matrix using matrix() function

# 2*4 matrix
matrix(1:8, nrow = 2)

#2*4 matrix, each row is filled first
matrix(1:8,nrow = 2, byrow = T)

# 4*2 matrix
matrix(1:8, ncol = 2)
1357
2468
1234
5678
15
26
37
48
In [31]:
## Name columns and rows of a matrix
m <- matrix(1:4,nrow = 2)
colnames(m) <- c("col one","col two")
rownames(m) <- c("row one","row two")
m
col onecol two
row one13
row two24
In [32]:
## Calling elements
print(m[2,])
print(m[,2])
print(m[2,2])
col one col two 
      2       4 
row one row two 
      3       4 
[1] 4
In [33]:
# Arithmatic on matrices
print("Scalar Multiplication:")
m * 2
print("Element Wise Multiplication:")
m * m
print("Matrix Multiplication:")
m %*% m
[1] "Scalar Multiplication:"
col onecol two
row one26
row two48
[1] "Element Wise Multiplication:"
col onecol two
row one1 9
row two4 16
[1] "Matrix Multiplication:"
col onecol two
row one 715
row two1022

Dataframes:
Dataframe مهم‌ترین و پراستفاده‌ترین داده‌ساختاری است که در R می‌باشد.
یک جدول که در آن هر ستون شامل مقادیر یک متغیر و هر سطر شامل مجموعه‌ای از مقادیر هر ستون می‌باشد.
In [34]:
## Create a dataframe with data.frame()
df <- data.frame(
    ID = 1:5,
    Name = c("Ali","Reza","Kiarash","Nima","Hossein"),
    Grade = c(20,16,17.5,14,19))

df
IDNameGrade
1 Ali 20.0
2 Reza 16.0
3 Kiarash17.5
4 Nima 14.0
5 Hossein19.0
In [35]:
## Summary of a dataframe
summary(df)
       ID         Name       Grade     
 Min.   :1   Ali    :1   Min.   :14.0  
 1st Qu.:2   Hossein:1   1st Qu.:16.0  
 Median :3   Kiarash:1   Median :17.5  
 Mean   :3   Nima   :1   Mean   :17.3  
 3rd Qu.:4   Reza   :1   3rd Qu.:19.0  
 Max.   :5               Max.   :20.0  
In [36]:
##Selecting elements
df$Grade
  1. 20
  2. 16
  3. 17.5
  4. 14
  5. 19
In [37]:
df[1,]
IDNameGrade
1 Ali20
In [38]:
df[,1]
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
In [39]:
df[df$Grade > 18,]
IDNameGrade
11 Ali 20
55 Hossein19
In [40]:
df[c("ID","Grade")]
IDGrade
1 20.0
2 16.0
3 17.5
4 14.0
5 19.0

همینطور هنگامی که مجموعه‌داده‌ای را از یک فایل می‌خوانید به صورت dataframe دخیره می‌شود.
In [41]:
## Depending on the format of dataset
## for example inorder to read a .csv file, use read.csv()
read.csv("Address of the file")
Warning message in file(file, "rt"):
“cannot open file 'Address of the file': No such file or directory”
Error in file(file, "rt"): cannot open the connection
Traceback:

1. read.csv("Address of the file")
2. read.table(file = file, header = header, sep = sep, quote = quote, 
 .     dec = dec, fill = fill, comment.char = comment.char, ...)
3. file(file, "rt")


نکات تکمیلی


یکی از بهترین راه‌های دسترسی سریع و مرور نکات پایه‌ای R ، استفاده از cheat sheet های R می‌باشد.
در کنار این نوت‌بوک cheat sheet نکات پایه‌ای قرار داده‌شده که می‌توانید از آن استفاده کنید.
همینطور یک cheat sheet دیگر برای کار با R Studio نیز قرار داده شده است.