Ngôn ngữ lập trình R/Kiểu dữ liệu
Các kiểu dữ liệu đơn giản thường gặp[sửa]
Trên đây chúng ta đã gặp hai kiểu dữ liệu: dữ liệu số và dữ liệu xâu ký tự. Để phân biệt rõ hơn, ta làm "thí nghiệm" sau:
> x = '1' > y = 1 > mode(x) [1] "character" > mode(y) [1] "numeric"
Hàm mode cho biết dạng dữ liệu được ghi trong biến. Ta thấy x chứa '1' là một ký tự, trong khi y chứa 1 là một số.
Ta thử liều
> sqrt(x) Error in sqrt(x) : Non-numeric argument to mathematical function
Sở
dĩ
cần
phải
phân
biệt
các
kiểu
dữ
liệu
vì
mỗi
kiểu
dữ
liệu
khác
nhau
đi
kèm
với
cách
xử
lý
chúng,
các
hàm
khác
nhau.
Ta
có
thể
cắt,
dán,
in
các
dữ
liệu
ký
tự,
nhưng
không
thể
khai
căn
của
ký
tự
'a'
cũng
như
ký
tự
'1'.
Các
hàm
cho
xâu
ký
tự
được
liệt
kê
ở
(đây),
bạn
có
thể
tìm
kiếm
khi
cần
thiết.
Với ký tự '1', ta có một số tương ứng với ký tự đó (1), ta có thể chuyển đổi một ký tự như vậy thành một số:
> x1 = as.numeric(x) > mode(x1) [1] "numeric"
Nếu bạn lại thử chuyển 'a' thành một số:
> as.numeric('a') [1] NA Warning message: NAs introduced by coercion
Giá trị được biểu diễn bởi NA: không có giá trị số thực tương ứng với 'a'. NA là một ký tự đặc biệt, có thể hiểu như biểu diễn từ "khuyết". Trong một dãy giá trị đo, một trị số không đo được chẳng hạn do máy đo hỏng sẽ là giá trị khuyết, NA.
Kiểu số và kiểu ký tự là kiểu dữ liệu phổ biến hơn cả. Tuy nhiên đôi khi chúng ta gặp kiểu dữ liệu logic. Kiểu dữ liệu logic nảy sinh khi ta so sánh hai trị số. Để tránh trừu tượng, ta lại thí nghiệm:
> a = 1 > b = 2 > d = a > b > d [1] FALSE > mode(d) [1] "logical"
Trong thực tế việc so sánh rõ ràng là quen thuộc, nhưng đôi khi bạn không để ý rằng so sánh là một toán tử (theo định nghĩa ở trên.) Ta vừa gặp toán tử ">" trên đây, toán tử này nhận vào hai giá trị ghi trong biến a và b từ hai phía, và cho câu trả lời TRUE (Đúng) hoặc FALSE (Sai). Hiển nhiên 1 không thể lớn hơn 2 nên giá trị của d là FALSE. Tương tự như vậy ta có các toán tử logic khác "<", "<=", ">=", và cuối cùng toán tử "==" mà chúng tôi đã cố gắng nhấn mạnh sự khác biệt với lệnh gán.
> a < b [1] TRUE > a == b [1] FALSE
Các dạng logic rất quan trọng trong các "rẽ nhánh" của chương trình.
<< Mục lục