Lập trình hàm là một vấn đề quan trọng,khi đến một lúc chúng ta không thể sử dụng các hàm có sẵn trong R thì chúng ta sẽ phải làm thủ công để có được kết quả mong muốn.

1.1 Hàm tính tổng:

tong = function(x){
  sum  = 0
  for(i in 1:length(x)) {
    sum  = sum + x[i]
  }
  return(sum)
}
x  = c(1,3,4,2,5,6,7)
tong(x)
## [1] 28
sum(x) # Sử dụng hàm sum() để kiểm tra lại
## [1] 28

1.2 Hàm tính trung bình:

trung_binh = function(x){
  mean  = tong(x)/length(x)
  return(mean)
}
x  = c(1,3,4,6,7,3,2)
trung_binh(x)
## [1] 3.714286
mean(x) # Sử dụng hàm mean() để kiểm tra lại
## [1] 3.714286

1.3 Hàm tính phương sai:

phuong_sai = function(x){
  a = (x - trung_binh(x))^2
  sum = 0
  for (i in 1:length(x)) {
    sum  = sum + a[i]
  }
  return(sum/(length(x)-1))
}
x = c(2,4,5,1,2,3,4)
phuong_sai(x)
## [1] 2
var(x) #Sử dụng hàm var() để kiểm tra lại
## [1] 2

1.4 Hàm tìm giá trị lớn nhất:

MAX  = function(x){
  max = x[1]
  for(i in  1:length(x)){
    if(max < x[i]){
      max = x[i]
    }
  }
  return(max)
}
x  =  c(12,5,6,-5,8,20)
MAX(x)
## [1] 20
max(x) #Sử dụng hàm max() để kiểm tra lại
## [1] 20

1.5 Hàm tìm giá trị nhỏ nhất:

MIN =function(x){
  min = x[1]
  for(i in 1:length(x)){
    if(min > x[i]){
      min = x[i]
    }
  }
  return(min)
}
x = c(-5,3,-6,2,7,-2,4)
MIN(x)
## [1] -6
min(x) #Sử dụng hàm min() để kiểm tra lại
## [1] -6

1.6 Hàm tính hệ số tương quan theo Pearson:

Ta đã biết công thức tính hệ số tương quan theo Pearson được tính như sau:

\(r_{xy} = \dfrac{\sum_{i=1}^{n}(x_i-\overline{x}{})(y_i-\overline{y})}{\sqrt{\sum_{i=1}^{n}(x_i-\overline{x})^2 \sum_{i=1}^{n}(y_i-\overline{y})^2}} = \dfrac{cov(x,y)}{\sqrt{Var(x)Var(y)}}\)

#Viết hàm tính hiệp phương sai:
covariance = function(x,y){
  a  = (x-mean(x))*(y-mean(y))
  sum = 0
  if(length(x)==length(y)){
    for(i in 1:length(x)){
      sum  = sum + a[i]
    }
  }
  return(sum/(length(x)-1))
}
x = c(1,2,3,7,4,6,9,-5)
y = c(2,3,6,7,1,-6,6,2)
covariance(x,y)
## [1] 2.303571
cov(x,y) # kiểm tra lại bằng hàm cov()
## [1] 2.303571
# Hàm tính hệ số tương quan :
CORR =  function(x,y){
  cor = covariance(x,y)/(sqrt(phuong_sai(x)*phuong_sai(y)))
  return(cor)
}
x = c(1,2,3,7,4,6,9,-5)
y = c(2,3,6,7,1,-6,6,2)
CORR(x,y)
## [1] 0.1292328
cor(x,y) #Kiểm tra lại bằng hàm cor()
## [1] 0.1292328

1.7 Hàm tung đồng xu:

throw.coin = function(){
  x = runif(1)
  if(x <=1/2) "Head" else "Tail"
}
sample.coin = function(n){
  replicate(n,throw.coin())
}
X = sample.coin(1000)
table(X)/length(X) #Xác suất ra của mỗi mặt.
## X
##  Head  Tail 
## 0.498 0.502

1.8 Hàm tung xúc sắc:

toss.die  = function(){
  x = runif(1)
  if(x <=1/6) 1 else{
    if(x <= 2/6) 2 else{
      if(x <=3/6 )3 else{
        if(x <=4/6) 4 else{
          if(x <=5/6) 5 else 6
        }
      }
    }
  }
}
sample.die =  function(n){
  replicate(n,toss.die())
}
X = sample.die(1000)
table(X)/length(X) #Tần suất xuất hiện của từng mặt trong n lần tung
## X
##     1     2     3     4     5     6 
## 0.182 0.152 0.166 0.164 0.170 0.166

1.9 Giải phương trình bậc 2:

solve_2 = function(a,b,c){
  if(a==0){
    if(b==0 & c==0){
      print("Phuong trinh vo so nghiem")
    }
    if(b==0 & c != 0 ){
      print("Phuong trinh vo nghiem")
    }
    else {
      print("Phuong trinh co nghiem :")
      print(-c/b)
    }
  }
  else{
    delta = b^2-4*a*c
    if(delta <0){
      print("Phuong trinh vo nghiem")
    }
     else if(delta == 0){
      x = -b/(2*a)
      print("Phuong trinh co nghiem kep x = ")
      print(x)
    }
    else if(delta > 0 ){
      x1 = (-b + sqrt(delta))/(2*a)
      x2 = (-b - sqrt(delta))/(2*a)
      print("Phuong trinh co 2 nghiem phan biet:")
      print(x1)
      print(x2)
    }
  }
}
solve_2(1,2,3)
## [1] "Phuong trinh vo nghiem"
solve_2(1,3,-5)
## [1] "Phuong trinh co 2 nghiem phan biet:"
## [1] 1.192582
## [1] -4.192582
solve_2(1,-4,4)
## [1] "Phuong trinh co nghiem kep x = "
## [1] 2