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