“Muốn biết phải hỏi, muốn giỏi phải học.”
| Phép toán | Ký hiệu trong R |
|---|---|
| Cộng |
+
|
| Trừ |
-
|
| Nhân |
*
|
| Chia |
/
|
| Nâng lũy thừa |
^, **
|
| Chia lấy phần dư |
%%
|
| Chia lấy phần nguyên |
%/%
|
Thứ tự ưu tiên phép toán từ trái sang phải:
() \(\rightarrow\)
^ \(\rightarrow\)
* \(\rightarrow\)
/ \(\rightarrow\)
+ \(\rightarrow\) -.
2+3
## [1] 5
14/6
## [1] 2.333333
14/6+5
## [1] 7.333333
14/(6+5)
## [1] 1.272727
3^2
## [1] 9
-2^2
## [1] -4
(-2)^2
## [1] 4
(2+3)^2*3/5+1
## [1] 16
Ví dụ: Hãy tính các biểu thức sau bằng R
Căn bậc hai, logarit và hàm mũ
sqrt(9)
## [1] 3
sqrt(5.311)
## [1] 2.304561
log(243) # mặc định là cơ số e
## [1] 5.493061
log(243, base = 3) # log cơ số 3
## [1] 5
exp(3)
## [1] 20.08554
log(243, base = exp(1))
## [1] 5.493061
log(243)
## [1] 5.493061
Ký hiệu e trong R.
1e3
## [1] 1000
5e4
## [1] 50000
2e-3
## [1] 0.002
100000000000
## [1] 1e+11
500000000000
## [1] 5e+11
0.00000000032
## [1] 3.2e-10
Bài tập 2.1
Việc gán các đối tượng/kết quả trong R với một cái tên cụ thể sẽ giúp
ít cho việc gọi lại các đối tượng đó trong các tính toán tiếp theo. Để
gán một đối tượng nào đó trong R với một cái tên cho trước chúng ta dùng
dấu <- hoặc dấu =.
x <- -5
x
## [1] -5
y = 10
y
## [1] 10
a <- (2+3)^2*3/5+1
a
## [1] 16
sqrt(a)
## [1] 4
# (overwrite) ghi đè
a = a + 10
a
## [1] 26
(a^2-3*a-8)/10 -> b
b
## [1] 59
# liệt kê tất cả các đối đượng đang có trong workspace
ls()
## [1] "a" "b" "x" "y"
Lưu ý: Khi đặt tên đối tượng trong R cần chú ý một số điều sau:
Mydata và
mydata là hai đối tượng khác nhau).3mydata là không
hợp lệ nhưng mydata3 là hợp lệ)._ hoặc dấu chấm
. để nối tên đối tượng (my_data hoặc
my.data) nhưng không được dùng dấu gạch ngang
- (my-data).Bài tập 2.2
Vectơ là một cấu trúc dữ liệu cơ bản trong R. Nó chứa các phần tử
cùng kiểu. Các kiểu dữ liệu có thể là logic (TRUE,
FALSE), số nguyên (0L, 3L,
10L), số thực (3, 5.15,
0.32, 100), ký tự (small,
medium, large) hoặc số phức
(1+2i, 3i, 2+i). Để tạo vectơ
trong R chúng ta dùng hàm c().
myvec1 <- c(1, 3, 1, 42)
myvec1
## [1] 1 3 1 42
myvec2 <- c(3, -3, 2, 3.45, 1e+03, 64^0.5, 2+(3-1.1)/9.44)
myvec2
## [1] 3.000000 -3.000000 2.000000 3.450000 1000.000000 8.000000
## [7] 2.201271
myvec3 <- c(myvec1, myvec2)
print(myvec3)
## [1] 1.000000 3.000000 1.000000 42.000000 3.000000 -3.000000
## [7] 2.000000 3.450000 1000.000000 8.000000 2.201271
Để tạo ra dãy số (vectơ) cách đều nhau 1 đơn vị chúng ta có thể dùng
dấu :.
x <- 1:10
x
## [1] 1 2 3 4 5 6 7 8 9 10
y <- 10:1
y
## [1] 10 9 8 7 6 5 4 3 2 1
(z <- 1:10*2)
## [1] 2 4 6 8 10 12 14 16 18 20
Sau đây là một số hàm liên quan đến vectơ:
seq() (sequence) dùng để tạo ra dãy số với khoảng
cách đều tùy ý.seq(from = 3, to = 27, by = 3)
## [1] 3 6 9 12 15 18 21 24 27
seq(from = 3, to = 27, length.out = 40)
## [1] 3.000000 3.615385 4.230769 4.846154 5.461538 6.076923 6.692308
## [8] 7.307692 7.923077 8.538462 9.153846 9.769231 10.384615 11.000000
## [15] 11.615385 12.230769 12.846154 13.461538 14.076923 14.692308 15.307692
## [22] 15.923077 16.538462 17.153846 17.769231 18.384615 19.000000 19.615385
## [29] 20.230769 20.846154 21.461538 22.076923 22.692308 23.307692 23.923077
## [36] 24.538462 25.153846 25.769231 26.384615 27.000000
seq(20, 4, by = -1)
## [1] 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4
seq(20, 4, length.out = 5)
## [1] 20 16 12 8 4
rep() (replicate) cho phép lặp lại các giá trị của
một vectơ.rep(1, times = 4)
## [1] 1 1 1 1
rep(c(3, 62, 8), times = 3)
## [1] 3 62 8 3 62 8 3 62 8
rep(c(3, 62, 8), each = 2)
## [1] 3 3 62 62 8 8
rep(c(3, 62, 8), times = 3, each = 2)
## [1] 3 3 62 62 8 8 3 3 62 62 8 8 3 3 62 62 8 8
c(3, 8.3, rep(32, times = 4), seq(from = -2, to = 1, length.out = 5))
## [1] 3.00 8.30 32.00 32.00 32.00 32.00 -2.00 -1.25 -0.50 0.25 1.00
sort() cho phép sắp xếp thứ tự các giá trị của
vectơ.sort(c(2.5, -1, -10, 3.44), decreasing = FALSE) # sắp tăng dần
## [1] -10.00 -1.00 2.50 3.44
sort(c(2.5, -1, -10, 3.44), decreasing = TRUE) # sắp giảm dần
## [1] 3.44 2.50 -1.00 -10.00
(my_vec <- seq(from=4.3,to=5.5,length.out=8))
## [1] 4.300000 4.471429 4.642857 4.814286 4.985714 5.157143 5.328571 5.500000
sort(my_vec, decreasing = T) # sắp giảm dần
## [1] 5.500000 5.328571 5.157143 4.985714 4.814286 4.642857 4.471429 4.300000
length() giúp chúng ta tính độ dài của vectơ.length(my_vec)
## [1] 8
Bài tập 2.3
c(-1, 3, -5, 7, -9) hai lần, trong đó mỗi
thành phần lặp lại 10 lần và đặt tên cho đối tượng đó. Sắp xếp các giá
trị của đối tượng vừa tạo từ lớn đến bé.Chúng ta có thể sử dụng chỉ số chỉ vị trí của các giá trị của một vectơ để trích xuất phần tử và tập con của nó.
my.vec <- c(5,-2.3,4,4,4,6,8,10,40221,-8)
my.vec[1]
## [1] 5
my.vec[2]
## [1] -2.3
my.vec[length(my.vec)]
## [1] -8
my.vec[-1]
## [1] -2.3 4.0 4.0 4.0 6.0 8.0 10.0 40221.0 -8.0
my.vec[-2]
## [1] 5 4 4 4 6 8 10 40221 -8
my.vec[c(1,3,5)]
## [1] 5 4 4
Chúng ta có thể thay thế một hay nhiều giá trị của vectơ nào đó.
bar <- c(3,2,4,4,1,2,4,1,0,0,5)
bar
## [1] 3 2 4 4 1 2 4 1 0 0 5
bar[1] <- 100
bar
## [1] 100 2 4 4 1 2 4 1 0 0 5
bar[c(2,4,6)] <- c(200, 300, 400)
bar
## [1] 100 200 4 300 1 400 4 1 0 0 5
bar[7:10] <- 100
bar
## [1] 100 200 4 300 1 400 100 100 100 100 5
Bài tập 2.4
c(2, −5.1, −33) lặp lại 2 lần.: trong phần chỉ vị trí. Việc làm này cho cùng kết quả với
viêc dùng hàm sort( , decreasing = F).Trên R chúng ta có thể cộng, trừ, nhân, chia, nâng lũy thừa vectơ.
(x <- c(1, 3, 5, 7))
## [1] 1 3 5 7
(y <- c(2, 4, 6, 8))
## [1] 2 4 6 8
x + y
## [1] 3 7 11 15
x - y
## [1] -1 -1 -1 -1
x*y
## [1] 2 12 30 56
x/y
## [1] 0.5000000 0.7500000 0.8333333 0.8750000
x^2
## [1] 1 9 25 49
R cho phép tính toán trên hai vectơ không cùng độ dài bằng cách xoay vòng thành phần của vectơ ngắn hơn.
x + 3
## [1] 4 6 8 10
z <- c(2, 2)
x + z
## [1] 3 5 7 9
x*z
## [1] 2 6 10 14
x/10
## [1] 0.1 0.3 0.5 0.7
Chúng ta có thể tính tổng và tích các thành phần của vectơ bằng cách
dùng hàm sum() (summation) và prod() (product)
tương ứng.
sum(x)
## [1] 16
prod(x)
## [1] 105
Để tính hoán vị và tổ hợp chúng ta dùng hàm factorial()
và choose() tương ứng.
factorial(4)
## [1] 24
choose(5,2)
## [1] 10
Chúng ta cũng có thể áp dụng hoán vị và tổ hợp trên vectơ. R sẽ tính trên từng thành phần của vectơ.
(y <- c(2,4,6,8))
## [1] 2 4 6 8
factorial(y)
## [1] 2 24 720 40320
choose(y,2)
## [1] 1 6 15 28
R cũng thực hiện tương tự như vậy cho tất cả các hàm toán học khác.
Bài tập 2.5
c(2, 0.5, 1, 2, 0.5, 1, 2, 0.5, 1) thành 1 bằng cách sử
dụng một vectơ có độ dài là 3.c(2, 4, 6) và c(1, 2)
kết hợp với hàm rep() và phép nhân
* để tạo ra vectơ
c(2, 4, 6, 4, 8, 12).Bài tập 2.6: Hãy tính các biểu thức sau bằng R
| Hàm/Toán tử | Chức năng |
|---|---|
+, -, *, /, ^, %%, %/%
|
Tính toán số học |
sqrt()
|
Căn bậc hai |
log()
|
Logarit cơ số e |
exp()
|
Hàm mũ |
<-, =
|
Gán đối tượng |
c()
|
Tạo vectơ |
:, seq()
|
Tạo dãy số |
rep()
|
Lặp vectơ |
sort()
|
Sắp xếp các giá trị của vectơ |
length()
|
Xác định độ dài vectơ |
[]
|
Trích xuất thành phần vectơ |
sum()
|
Tổng tất cả thành phần vectơ |
prod()
|
Tích tất cả thành phần vectơ |
factorial()
|
Tính giai thừa |
choose()
|
Tính tổ hợp |