Professional Documents
Culture Documents
Thí dụ: sử dụng câu lệnh điều kiện if(...)else, đoạn code sau sẽ kiểm tra và in ra màn hình R console
kết quả một số tự nhiên a cho trước là số chẵn (even number) hay số lẻ (odd number).
a <- 4
if (( a %% 2 )== 0 ){
cat (a , " is an even number ! \ n " ) # function cat () prints variables + string
} else {
cat (a , " is an odd number ! \ n " )
}
Thí dụ: sử dụng vòng lặp for(...){...}, đoạn code sau sẽ đếm xem có bao nhiêu số tự nhiên tính từ a
tới b mà chia hết cho 4.
a <- 1
b <- 1 0 0
count _ nb <- 0
for ( k in ( a : b )){
if (( k %% 4 )== 0 ){
count _ nb <- count _ nb + 1
}
}
print ( count _ nb )
Thí dụ: tương tự thí dụ trên nhưng bây giờ ta sẽ sử dụng vòng lặp while(...){...}.
a <- 1
b <- 1 0 0
k <- a
count _ nb <- 0
while ( k <= b ){
if (( k %% 4 )== 0 )
{ count _ nb <- count _ nb + 1 }
k <- k + 1
}
print ( count _ nb )
■ Remark: Để ngắt vòng lặp: sử dụng lệnh break.
Thí dụ: viết hàm đặt tên là my_count_func để đếm xem và trả về kết quả có bao nhiêu số tự nhiên tính từ
a tới b mà chia hết cho 4.
my _ count _ func <- function (a , b ){
count _ nb <- 0
for ( k in ( a : b )){
if (( k %% 4 )== 0 ){
count _ nb <- count _ nb + 1
}
}
return ( count _ nb )
}
##
my _ count _ func ( 1 ,1 0 0 )
• Còn để truy xuất địa chỉ thư mục làm việc hiện tại, ta dùng câu lệnh: getwd() ;
5.2 Workspace
Từ khi khởi động phần mềm (cửa sổ R console bắt đầu xuất hiện) cho đến khi thoát hoàn toàn khỏi
là một phiên làm việc. Tất cả những đối tượng tạo ra trong một phiên làm việc được lưu trong
workspace. Ta có thể lưu lại mọi thứ trong workspace ở một thời điểm này, rồi load lại workspace để tiếp
tục công việc ở một thời điểm sau.
save.image(’file_name.rda’) : lưu lại workspace ;
load(’file_name.rda’) : Tải/load workspace đã lưu (trong working directory hiện hành);
save(x , ’file_name.rda’) : lưu biến x với tên file "file_name.rda" vào thư mục làm việc hiện hành;
rm(x) : xóa biến x khỏi workspace hiện hành;
rm( list = ls() ) : xóa tất cả các biến ở workspace hiện hành;
ls() : liệt kê tất cả các biến ở workspace hiện hành;
• Nhập từ file excel (lưu ý file excel phải được lưu dưới dạng ’.csv’).
Chẳng hạn, load dữ liệu từ file excel có tên ’solieu.csv’ đã ở trong thư mục làm việc hiện hành như sau
mydata <- read . csv ( ' solieu . csv ' , header = F )
Nếu dữ liệu chứa trong file excel chưa phải là định dạng ’.csv’, ta cần mở file bằng Excel để lưu lại
dưới dạng ’.csv’ như sau:
vào Excel chọn File −→ Save as −→ chọn Save as type "CSV (Comma delimited)" ;
5.4 Xử lý dữ liệu
attach(data frame) : đưa một data frame vào workspace để xử lý;
subset(mydata, condition ) : tách dữ liệu từ mydata dưới điều kiện condition ;
merge(df1 , df2, by = ) : nhập hai dataframe df1 và df2 thành một;
Thí dụ, ta attach dataset mtcars và sau đó, trích ra dữ liệu của những chiếc xe thỏa mức tiêu thụ nhiên liệu
(mpg) lớn hơn hoặc bằng 20, như sau
attach ( mtcars )
mtcars
df <- subset ( mtcars , mpg >= 2 0 )
• Trong package xlsx, có thể sử dụng hàm write.xlsx(df) để lưu một data frame có tên df trong
thành một workbook trong excel. Thí dụ
library ( xlsx )
write . xlsx ( df , outfile , col . Names = TRUE , row . names = TRUE ,
sheetName = " Sheet 1 " , append = FALSE )
• Hàm write.table() dùng để lưu một đối tượng trong vào một tệp text (.txt) ở thư mục làm việc
hiện hành. Chẳng hạn, cú pháp sẽ có dạng như sau
write . table (x , outfile , sep = delimiter , quote = TRUE , na = " NA " )
trong đó x là đối tượng trong cần lưu, và outfile là tệp chứa đối tượng được lưu lại trong thư mục
làm việc hiện hành. Thí dụ
write . table ( mydata , " mydata . txt " , sep = " ," )
sẽ lưu dataset mydata vào một tệp có tên "mydata.txt" trong thư mục làm việc hiện hành với các dữ liệu
sẽ được ngăn cách bởi dấu phẩy (sep = ","). Còn nếu ta thay sep = "," bởi sep = "\t" khi đó các
dữ liệu trong tệp .txt sẽ được phân cách nhau bởi một khoảng trắng dấu tab.
Bài 2. Tạo hai vector x = (1, 2, 5, 7, −3, 0, 5, 1, 5, 6) và y = (2, 2, 0, −5, 7, 8, 11, 9, 3, 2).
(a) Tạo vector u gồm những phần tử của x là số chẵn và vector v gồm những phần tử của y là số lẻ.
(b) Trích ra vector những phần tử lớn hơn 0 của x và vector khác gồm những phần tử lớn hơn 0 của y.
(c) Tính trung bình mẫu, phương sai mẫu và độ lệch chuẩn mẫu cho x và y.
(d) Sắp xếp vector x theo thứ tự tăng dần và sắp xếp vector y theo thứ tự giảm dần.
Bài 3. Load dữ liệu từ file data01.xls. Dùng lệnh điều kiện if và vòng lặp for để tạo ra vector Index
theo yêu cầu sau:
• Nếu Age ≤ 60 thì giá trị tương ứng trong vector Index là 0;
• Nếu 60 < Age ≤ 70 thì giá trị tương ứng trong vector Index là 1;
• Nếu 70 < Age ≤ 80 thì giá trị tương ứng trong vector Index là 2;
• Nếu 80 < Age thì giá trị tương ứng trong vector Index là 3;
Bài 4. File dữ liệu data11.xls chứa các số liệu về chiều cao của một loại cây trồng được ghi lại theo bảng
tần số dạng khoảng, trong đó cột a là cận dưới của khoảng, b là cận trên của khoảng và n là tần số tương
ứng của từng khoảng. Thực hiện các bước sau:
(a) Đọc dữ liệu từ file data11.xls, và gán vào một dataframe đặt tên là ex4_plants_height ;
(b) Viết một hàm với các tham số tương ứng với các biến a, b, n trong dataframe ex4_plants_height,
trả ra một list gồm các giá trị sau: chiều cao nhỏ nhất, chiều cao lớn nhất của cây, trung bình mẫu và
phương sai mẫu.
Bài 5. Đọc dữ liệu từ file data01.xls và gán vào data frame đặt tên là data1;
(a) Tính trung bình mẫu, phương sai mẫu và trung vị của các biến FPSA và TPSA;
(b) Tách những giá trị của biến FPSA có K = 0 và những giá trị của biến FPSA có K = 1;
Bài 6. Cho một vector v = (v1 , v2 , ..., vn ) ∈ Rn , với n ≥ 1. Với A là một mệnh đề toán học,
(
1, nếu A đúng,
hàm chỉ (indicator function) cho bởi 1A := , (thí dụ 1{1≤1} = 1 và 1{2≤1} = 0).
0, nếu A sai,
Hàm tích lũy thực nghiệm của vector v được định nghĩa là
F : R −→ [0; 1]
1 X
x 7−→ F (x) := 1{u∈R:u≤x} (vj ).
n
1≤j≤n
(a) Viết hàm cdf_empirical(...) để tính hàm F (sinh viên tự xác định các tham số cần thiết của hàm).
(b) Sau đó, dùng hàm vừa viết áp dụng để tính cho vector v = (0.1, 0.2, 0.4, 0.05, 0.25).
Bài 7. Cho vector thực v = (v1 , v2 , ..., vn ) chứa n giá trị quan trắc (observations). Gọi qγ/100 phân vị mức
γ(%) của dữ liệu được xác định như sau, với 0 < γ < 100:
• Sắp xếp các giá trị quan trắc trong vector v theo thứ tự không giảm thu được v(1) , v(2) , ..., v(n) ;
q
• Tính chỉ số j = × n, khi đó
100
▷ nếu j là số tự nhiên, phân vị mức γ được xác định bởi qγ/100 = v(j) ;
v([j]) + v([j]+1)
▷ nếu j KHÔNG phải số tự nhiên, phân vị mức γ được xác định bởi qγ/100 = ;
2
(a) Viết hàm my_quantile(v, gamma) trả ra kết quả là phân vị mức gamma% của vector v;
(b) Áp dụng hàm my_quantile(v, gamma) vừa viết để tìm tứ phân vị của vector Age trong bài tập 3.