R là một trong những ngôn ngữ có tập hợp kiểu đa dạng và phức tạp bởi lý do đây là ngôn ngữ lai tạp giữa thống kê, lập trình, truy vấn dữ liệu và xử lý dữ liệu nên về thiêt kế R vừa có thể lập trình được (gồm các hàm và biến), vừa có thể truy vấn và xử lý dữ liệu được (gồm bảng, vector, matrix), vừa có thể vẽ đồ thị, hồi qui model và lưu trữ kế quả hồi qui (gồm các list, function) Về cơ bản định dạng kiểu trong R sẽ được chia vào 3 nhóm:

Đối với các kết quả trả về từ hồi qui, đồ thị, thống kê thông thường sẽ là 1 list, trong list sẽ chứa các element tương ứng với các phần mà package chạy model, vẽ đồ thị, thống kê muốn trả về.

I. DATA TYPE

1. matrix

matrix là một dữ liệu có dạng ma trận kích thước mxn. Trong đó m là số dòng, n là số cột. Các dòng và các cột của một matrix phải cùng độ dài và kiểu dữ liệu. Cú pháp chung tạo một matrix:

mymatrix <- matrix(vector, nrow=r, ncol=c, byrow=FALSE, dimnames=list(char_vector_rownames, char_vector_colnames))

byrow = TRUE sẽ tạo ra matrix có thể được filled theo dòng, byrow = FALSE sẽ tạo ra matrix được filled theo cột. dimnames là tùy chọn trong R, sẽ là tên nhãn được gán cho dòng và cột.

#tao matric 3x4
y <- matrix(1:12, nrow = 3, ncol = 4)
#tao matric tu cac vector
cells <- c(12,3,45,2)
rnames <- c("R1","R2")
cnames <- c("C1","C2")
mymatrix1 <- matrix(cells, nrow = 2, ncol = 2, byrow = TRUE,
                   dimnames = list(rnames,cnames))
mymatrix1
##    C1 C2
## R1 12  3
## R2 45  2
#khi con byrow = FALSE
mymatrix2 <- matrix(cells, nrow = 2, ncol = 2, byrow = FALSE,
                    dimnames = list(rnames,cnames))
mymatrix2
##    C1 C2
## R1 12 45
## R2  3  2
#byrow = TRUE danh so thu tu theo dong, tu trai qua phai, byrow = FALSE danh so thu tu #theo cot tu tren xuong

#Cung co the tao matrix tu data frame
df <- data.frame(seq(1,5,1),seq(2,6,1))
colnames(df) <- c("x","y")
mymatrix3 <- as.matrix(df)
mymatrix3
##      x y
## [1,] 1 2
## [2,] 2 3
## [3,] 3 4
## [4,] 4 5
## [5,] 5 6

Để lấy các phần tử là dòng cột trong matrix ta làm như sau

#giá trị mymatrix3
mymatrix3
##      x y
## [1,] 1 2
## [2,] 2 3
## [3,] 3 4
## [4,] 4 5
## [5,] 5 6
#phần tử dòng thứ nhất 
mymatrix3[,1]
## [1] 1 2 3 4 5
#phần tử cột thứ hai
mymatrix3[2,]
## x y 
## 2 3
#lấy dòng thứ 2 và 3 của toàn bộ các cột
mymatrix3[c(2,3),] #hoặc cũng có thể viết như sau
##      x y
## [1,] 2 3
## [2,] 3 4
mymatrix3[2:3,] #hoặc 
##      x y
## [1,] 2 3
## [2,] 3 4
mymatrix3[2:3,1:2]
##      x y
## [1,] 2 3
## [2,] 3 4

Về cơ bản để lấy phần tử của matrix cần xác định vị trí dòng cột cần lấy. Sau đó sử dụng cú pháp matrix[c(vị trí dòng cần lấy),c(vị trí cột cần lấy)].

2. Arrays

Array về cơ bản tương tự như matrix nhưng có thể có nhiều chiều hơn. Chẳng hạn như trong không gian 3 chiều, mỗi mặt cắt là một mặt phẳng có 2 chiều x,y. Các chiều này có thể biểu diễn trên matrix. Tuy nhiên để biểu diễn được toàn bộ không gian thì cần rất nhiều mặt phẳng và Array sẽ tổng hợp các matrix đó để biểu diễn thêm được số chiều. cú pháp của array:

array(vector,dim = c(nrow,ncolumn,nmatrix), dimnames = list(char_vector_rownames, char_vector_colnames, char_vector_matrixnames))

Ví dụ sau đây sẽ tạo thành một array 3 chiều là tập hợp của 3 matrix 3x3.

v <- c(5,9,3,10,11,12,13,14,15)
cnames <- c("C1","C2","C3")
rnames <- c("R1","R2","R3")
mnames <- c("Matrix1","Matrix2")
arr <- array(v, dim = c(3,3,2),
             dimnames = list(rnames,cnames,mnames))
arr
## , , Matrix1
## 
##    C1 C2 C3
## R1  5 10 13
## R2  9 11 14
## R3  3 12 15
## 
## , , Matrix2
## 
##    C1 C2 C3
## R1  5 10 13
## R2  9 11 14
## R3  3 12 15

Truy cập các phần tử của array

#lay matrix 1
arr[,,1]
##    C1 C2 C3
## R1  5 10 13
## R2  9 11 14
## R3  3 12 15
#lay dong 1 matrix 1
arr[1,,1]
## C1 C2 C3 
##  5 10 13
#lay cot 1 matrix 1
arr[,1,1]
## R1 R2 R3 
##  5  9  3
#lay dong 2,3 matrix 2
arr[2:3,,2]
##    C1 C2 C3
## R2  9 11 14
## R3  3 12 15

Các truy cập phần tử của array tương tự như matrix nhưng có thêm chỉ số matrix. Áp dụng công thức cho array. Tính tổng của các dòng và cột trong array

arr
## , , Matrix1
## 
##    C1 C2 C3
## R1  5 10 13
## R2  9 11 14
## R3  3 12 15
## 
## , , Matrix2
## 
##    C1 C2 C3
## R1  5 10 13
## R2  9 11 14
## R3  3 12 15
sum_column <- apply(arr,c(1),sum)
sum_column
## R1 R2 R3 
## 56 68 60

3. Data frame

Data frame là dữ liệu dạng bảng có mối liên hệ 2 chiều (hàng và cột). Mỗi chiều đại diện cho 1 trường có cùng kiểu dữ liệu và mỗi dòng đại diện cho một bản ghi hay quan sát. Một data frame phải thỏa mãn những tính chất sau đây:

  1. Tên của cột không được empty

  2. Tên của dòng phải là duy nhất.

  3. Kiểu dữ liệu của cột store trong data frame phải là numeric, factor và character.

  4. Độ dài dữ liệu các cột phải bằng nhau.

Cú pháp để tạo một data frame trong R data.frame(vector1,vector2,…,StringsAsFactors = FALSE) trong đó vector1,vector2,… là các vector có cùng độ dài. StringAsFactors có tác dụng xác định một biến character có dạng factor hay không (factor có thể hiểu là các gía trị của một biến định tinh chẳng hạn như (nam, nữ), (quí 1, quí 2, quí 3, quí 4),…).

#Tạo một data frame
df <- data.frame(
  STT = c(seq(1,10,1)),
  Name = c("Khanh","Linh","Trang","Mai","Alex","Mari","Bayes","Jon","Jame","But"),
  Salary = rnorm(10,1000,200),
  Birday = as.Date(c("1993-07-09","1998-11-21","1994-06-09","1999-07-06","1992-05-19"            ,"1993-07-09","1998-11-21","1994-06-09","1999-07-06","1992-05-19")),
  stringsAsFactors = FALSE
)

df
##    STT  Name    Salary     Birday
## 1    1 Khanh 1238.0964 1993-07-09
## 2    2  Linh  982.8822 1998-11-21
## 3    3 Trang 1280.0891 1994-06-09
## 4    4   Mai 1117.6870 1999-07-06
## 5    5  Alex  804.3996 1992-05-19
## 6    6  Mari  841.2865 1993-07-09
## 7    7 Bayes 1067.1011 1998-11-21
## 8    8   Jon  691.2785 1994-06-09
## 9    9  Jame  842.3963 1999-07-06
## 10  10   But  812.4053 1992-05-19

Để kiểm tra định dạng các biến trong một data.frame ta dùng hàm str(dataframe_name)

str(df)
## 'data.frame':    10 obs. of  4 variables:
##  $ STT   : num  1 2 3 4 5 6 7 8 9 10
##  $ Name  : chr  "Khanh" "Linh" "Trang" "Mai" ...
##  $ Salary: num  1238 983 1280 1118 804 ...
##  $ Birday: Date, format: "1993-07-09" "1998-11-21" ...

Chúng ta cũng có thể có một số thống kê cơ bản về các trường dữ liệu bằng hàm summary. Kết quả trả về sẽ gồm trung bình, min, max, median, các giá trị tới hạn của phân vị thứ 1,3

summary(df)
##       STT            Name               Salary           Birday          
##  Min.   : 1.00   Length:10          Min.   : 691.3   Min.   :1992-05-19  
##  1st Qu.: 3.25   Class :character   1st Qu.: 819.6   1st Qu.:1993-07-09  
##  Median : 5.50   Mode  :character   Median : 912.6   Median :1994-06-09  
##  Mean   : 5.50                      Mean   : 967.8   Mean   :1995-09-30  
##  3rd Qu.: 7.75                      3rd Qu.:1105.0   3rd Qu.:1998-11-21  
##  Max.   :10.00                      Max.   :1280.1   Max.   :1999-07-06

Bên cạnh đó một số package còn đưa ra được nhiều thông tin hơn chẳng hạn như basicStats (gói này chỉ hoạt động với các biến dạng numeric)

#neu chay bao loi khong thay fBasics package thi dung lenh install.package("fBasics")
library(fBasics)
basicStats(df[,c(1,3)])
##                   STT       Salary
## nobs        10.000000    10.000000
## NAs          0.000000     0.000000
## Minimum      1.000000   691.278532
## Maximum     10.000000  1280.089128
## 1. Quartile  3.250000   819.625605
## 3. Quartile  7.750000  1105.040518
## Mean         5.500000   967.762223
## Median       5.500000   912.639270
## Sum         55.000000  9677.622229
## SE Mean      0.957427    63.436933
## LCL Mean     3.334149   824.257910
## UCL Mean     7.665851  1111.266536
## Variance     9.166667 40242.445238
## Stdev        3.027650   200.605197
## Skewness     0.000000     0.264326
## Kurtosis    -1.561636    -1.573577

Truy cập các phần tử của data.frame như sau:

df
##    STT  Name    Salary     Birday
## 1    1 Khanh 1238.0964 1993-07-09
## 2    2  Linh  982.8822 1998-11-21
## 3    3 Trang 1280.0891 1994-06-09
## 4    4   Mai 1117.6870 1999-07-06
## 5    5  Alex  804.3996 1992-05-19
## 6    6  Mari  841.2865 1993-07-09
## 7    7 Bayes 1067.1011 1998-11-21
## 8    8   Jon  691.2785 1994-06-09
## 9    9  Jame  842.3963 1999-07-06
## 10  10   But  812.4053 1992-05-19
#Lấy dòng thứ 2 của data.frame
df[,2]
##  [1] "Khanh" "Linh"  "Trang" "Mai"   "Alex"  "Mari"  "Bayes" "Jon"  
##  [9] "Jame"  "But"
#Lấy cột thứ nhất của data.frame
df[1,]
##   STT  Name   Salary     Birday
## 1   1 Khanh 1238.096 1993-07-09
#Lấyphần tử dòng thứ 2 cột thứ 2
df[2,2]
## [1] "Linh"

Thêm 1 dòng vào data frame

df <- rbind(df,c(11,"Last",900,"1990-12-01"))
df
##    STT  Name           Salary     Birday
## 1    1 Khanh 1238.09644474868 1993-07-09
## 2    2  Linh 982.882232745103 1998-11-21
## 3    3 Trang 1280.08912814394 1994-06-09
## 4    4   Mai 1117.68697602614 1999-07-06
## 5    5  Alex 804.399648627006 1992-05-19
## 6    6  Mari 841.286513516871 1993-07-09
## 7    7 Bayes 1067.10114307723 1998-11-21
## 8    8   Jon 691.278532358373 1994-06-09
## 9    9  Jame 842.396307641932 1999-07-06
## 10  10   But 812.405301712449 1992-05-19
## 11  11  Last              900 1990-12-01

Xóa một dòng dữ liệu trong data frame

#xóa dòng dữ liệu thứ 1
df[-1,]
##    STT  Name           Salary     Birday
## 2    2  Linh 982.882232745103 1998-11-21
## 3    3 Trang 1280.08912814394 1994-06-09
## 4    4   Mai 1117.68697602614 1999-07-06
## 5    5  Alex 804.399648627006 1992-05-19
## 6    6  Mari 841.286513516871 1993-07-09
## 7    7 Bayes 1067.10114307723 1998-11-21
## 8    8   Jon 691.278532358373 1994-06-09
## 9    9  Jame 842.396307641932 1999-07-06
## 10  10   But 812.405301712449 1992-05-19
## 11  11  Last              900 1990-12-01

thêm 1 cột trong data frame

newcol <- c(rnorm(11,100,10))
df <- data.frame(df,newcol)
df
##    STT  Name           Salary     Birday    newcol
## 1    1 Khanh 1238.09644474868 1993-07-09  90.92010
## 2    2  Linh 982.882232745103 1998-11-21  79.55551
## 3    3 Trang 1280.08912814394 1994-06-09  99.92532
## 4    4   Mai 1117.68697602614 1999-07-06 102.34751
## 5    5  Alex 804.399648627006 1992-05-19 106.31634
## 6    6  Mari 841.286513516871 1993-07-09  98.42687
## 7    7 Bayes 1067.10114307723 1998-11-21  86.84785
## 8    8   Jon 691.278532358373 1994-06-09  94.18305
## 9    9  Jame 842.396307641932 1999-07-06  98.85276
## 10  10   But 812.405301712449 1992-05-19  88.80000
## 11  11  Last              900 1990-12-01 111.37788

update một phần tử trong data frame

#Update phần tử dòng 2, cột 2 trong data frame
df[2,2]
## [1] "Linh"
df[2,2] <- c("Linh Update")
df
##    STT        Name           Salary     Birday    newcol
## 1    1       Khanh 1238.09644474868 1993-07-09  90.92010
## 2    2 Linh Update 982.882232745103 1998-11-21  79.55551
## 3    3       Trang 1280.08912814394 1994-06-09  99.92532
## 4    4         Mai 1117.68697602614 1999-07-06 102.34751
## 5    5        Alex 804.399648627006 1992-05-19 106.31634
## 6    6        Mari 841.286513516871 1993-07-09  98.42687
## 7    7       Bayes 1067.10114307723 1998-11-21  86.84785
## 8    8         Jon 691.278532358373 1994-06-09  94.18305
## 9    9        Jame 842.396307641932 1999-07-06  98.85276
## 10  10         But 812.405301712449 1992-05-19  88.80000
## 11  11        Last              900 1990-12-01 111.37788

4. List

List là một object trong R chứa nhiều phần tử có định dạng khác nhau như numeric, string, vector, và thậm chí là trong list có thể chứa các list khác. Một list có thể chứa cả hàm, data frame, array và matrix như là những phần tử của nó.

Để khởi tạo một list ta sử dụng hàm list

#tạo mọt list
newList <- list(c(1,2,3),"Khanh","Pham Đình",df,TRUE, 12.4,434.523)
newList
## [[1]]
## [1] 1 2 3
## 
## [[2]]
## [1] "Khanh"
## 
## [[3]]
## [1] "Pham Ðình"
## 
## [[4]]
##    STT        Name           Salary     Birday    newcol
## 1    1       Khanh 1238.09644474868 1993-07-09  90.92010
## 2    2 Linh Update 982.882232745103 1998-11-21  79.55551
## 3    3       Trang 1280.08912814394 1994-06-09  99.92532
## 4    4         Mai 1117.68697602614 1999-07-06 102.34751
## 5    5        Alex 804.399648627006 1992-05-19 106.31634
## 6    6        Mari 841.286513516871 1993-07-09  98.42687
## 7    7       Bayes 1067.10114307723 1998-11-21  86.84785
## 8    8         Jon 691.278532358373 1994-06-09  94.18305
## 9    9        Jame 842.396307641932 1999-07-06  98.85276
## 10  10         But 812.405301712449 1992-05-19  88.80000
## 11  11        Last              900 1990-12-01 111.37788
## 
## [[5]]
## [1] TRUE
## 
## [[6]]
## [1] 12.4
## 
## [[7]]
## [1] 434.523

Ta có thể thấy mỗi phần tử sẽ được lưu vào trong list theo đúng vị trí khởi tạo của nó (vị trí thứ i của list kí hiệu là [[i]]). Đặt tên cho 1 list như sau:

names(newList) <- c(name_element1,name_element2,name_element3,…)

newList <- list(c(1,2,3),"Khanh","Pham Đình",df,TRUE, 12.4,434.523)
names(newList) <- c("STT","Ten","Ho va Ten Dem", "Data Frame","Logical","Numeric1","Numeric2")
newList
## $STT
## [1] 1 2 3
## 
## $Ten
## [1] "Khanh"
## 
## $`Ho va Ten Dem`
## [1] "Pham Ðình"
## 
## $`Data Frame`
##    STT        Name           Salary     Birday    newcol
## 1    1       Khanh 1238.09644474868 1993-07-09  90.92010
## 2    2 Linh Update 982.882232745103 1998-11-21  79.55551
## 3    3       Trang 1280.08912814394 1994-06-09  99.92532
## 4    4         Mai 1117.68697602614 1999-07-06 102.34751
## 5    5        Alex 804.399648627006 1992-05-19 106.31634
## 6    6        Mari 841.286513516871 1993-07-09  98.42687
## 7    7       Bayes 1067.10114307723 1998-11-21  86.84785
## 8    8         Jon 691.278532358373 1994-06-09  94.18305
## 9    9        Jame 842.396307641932 1999-07-06  98.85276
## 10  10         But 812.405301712449 1992-05-19  88.80000
## 11  11        Last              900 1990-12-01 111.37788
## 
## $Logical
## [1] TRUE
## 
## $Numeric1
## [1] 12.4
## 
## $Numeric2
## [1] 434.523

Có 2 cách đê truy cập các phần tử trong list:

  • cách 1: Dùng số thứ tự để truy cập
#Truy cập vào phần tử thứ nhất của list:
newList[1]
## $STT
## [1] 1 2 3
  • cách 2: Sử dụng tên của phần tử
#Truy cập vào phần tử tên STT của list:
newList$STT
## [1] 1 2 3
#Khi phần tử có tên cách nhau bởi khoảng trắng thì phải sử dụng láy đơn
newList$'Data Frame'
##    STT        Name           Salary     Birday    newcol
## 1    1       Khanh 1238.09644474868 1993-07-09  90.92010
## 2    2 Linh Update 982.882232745103 1998-11-21  79.55551
## 3    3       Trang 1280.08912814394 1994-06-09  99.92532
## 4    4         Mai 1117.68697602614 1999-07-06 102.34751
## 5    5        Alex 804.399648627006 1992-05-19 106.31634
## 6    6        Mari 841.286513516871 1993-07-09  98.42687
## 7    7       Bayes 1067.10114307723 1998-11-21  86.84785
## 8    8         Jon 691.278532358373 1994-06-09  94.18305
## 9    9        Jame 842.396307641932 1999-07-06  98.85276
## 10  10         But 812.405301712449 1992-05-19  88.80000
## 11  11        Last              900 1990-12-01 111.37788

Thêm sửa xóa các phần tử trong list

#Thêm phần tử newElement
newList[8] <- "newElement"
newList[8]
## [[1]]
## [1] "newElement"
#Remove phần tử newElement
newList[8] <- NULL
newList[8]
## $<NA>
## NULL
#Update phần tử thứ 2
newList[2] <- "Khanh update"
newList[2]
## $Ten
## [1] "Khanh update"

Merge 2 list với nhau:

# tạo ra 2 list
list1 <- list(1,2,3)
list2 <- list("A","B","C")
# merge 2 list
mergedList <- c(list1,list2)
mergedList
## [[1]]
## [1] 1
## 
## [[2]]
## [1] 2
## 
## [[3]]
## [1] 3
## 
## [[4]]
## [1] "A"
## 
## [[5]]
## [1] "B"
## 
## [[6]]
## [1] "C"

Chuyển hóa một list thành một vector

#tạo 2 list
list1 <- list(1:5)
list1
## [[1]]
## [1] 1 2 3 4 5
list2 <- list(5:10)
list2
## [[1]]
## [1]  5  6  7  8  9 10
#chuyen hoa thanh vector
v1 <- unlist(list1)
v1
## [1] 1 2 3 4 5
v2 <- unlist(list2)
v2
## [1]  5  6  7  8  9 10

Chuyển hóa một list thành một vector khi phần tử được chuyển dạng data frame

#tạo list chứa df
newList <- list("Name",df)
newList
## [[1]]
## [1] "Name"
## 
## [[2]]
##    STT        Name           Salary     Birday    newcol
## 1    1       Khanh 1238.09644474868 1993-07-09  90.92010
## 2    2 Linh Update 982.882232745103 1998-11-21  79.55551
## 3    3       Trang 1280.08912814394 1994-06-09  99.92532
## 4    4         Mai 1117.68697602614 1999-07-06 102.34751
## 5    5        Alex 804.399648627006 1992-05-19 106.31634
## 6    6        Mari 841.286513516871 1993-07-09  98.42687
## 7    7       Bayes 1067.10114307723 1998-11-21  86.84785
## 8    8         Jon 691.278532358373 1994-06-09  94.18305
## 9    9        Jame 842.396307641932 1999-07-06  98.85276
## 10  10         But 812.405301712449 1992-05-19  88.80000
## 11  11        Last              900 1990-12-01 111.37788
#chuyển hóa phần tử thứ 2 sang data frame
newDataFrame <- unlist(newList[2])
newDataFrame
##               STT1               STT2               STT3 
##                "1"                "2"                "3" 
##               STT4               STT5               STT6 
##                "4"                "5"                "6" 
##               STT7               STT8               STT9 
##                "7"                "8"                "9" 
##              STT10              STT11              Name1 
##               "10"               "11"            "Khanh" 
##              Name2              Name3              Name4 
##      "Linh Update"            "Trang"              "Mai" 
##              Name5              Name6              Name7 
##             "Alex"             "Mari"            "Bayes" 
##              Name8              Name9             Name10 
##              "Jon"             "Jame"              "But" 
##             Name11            Salary1            Salary2 
##             "Last" "1238.09644474868" "982.882232745103" 
##            Salary3            Salary4            Salary5 
## "1280.08912814394" "1117.68697602614" "804.399648627006" 
##            Salary6            Salary7            Salary8 
## "841.286513516871" "1067.10114307723" "691.278532358373" 
##            Salary9           Salary10           Salary11 
## "842.396307641932" "812.405301712449"              "900" 
##            Birday1            Birday2            Birday3 
##             "8590"            "10551"             "8925" 
##            Birday4            Birday5            Birday6 
##            "10778"             "8174"             "8590" 
##            Birday7            Birday8            Birday9 
##            "10551"             "8925"            "10778" 
##           Birday10           Birday11            newcol1 
##             "8174"             "7639" "90.9200984288319" 
##            newcol2            newcol3            newcol4 
## "79.5555094446732" "99.9253177937757" "102.347505640443" 
##            newcol5            newcol6            newcol7 
## "106.316339142037" "98.4268746833422" "86.8478467430197" 
##            newcol8            newcol9           newcol10 
## "94.1830471503931"   "98.85275717642" "88.8000025414215" 
##           newcol11 
## "111.377875951411"

II. VALUE TYPE

Trong các ngôn ngữ lập trình bạn sẽ sử dụng biến để lưu trữ rất nhiều thông tin khác nhau. Khi một biến được khởi tạo, giá trị của nó sẽ được lưu trữ trên ô nhớ của máy tính. Nhờ đó mà biến có thể được gọi và tái sử dụng trong project. Một biến có thể được lưu trữ dưới nhiều định dạng khác nhau như character, wide character, integer, floating point, double floating point, boolean,…. Dựa trên các định dạng đó mà hệ điều hành sẽ quyết định phân bổ vùng địa chỉ nhớ để lưu trữ các biến này. Trái với các ngôn nhữ lập trình như C hay java, biến trong R không cần phải khai báo trước định dạng. Các kiểu định dạng biến trong R gồm 6 loại cơ bản: Logical (nhận giá trị TRUE hoặc FALSE), Numeric, Integer, Complex (số phức), Character, Raw(lưu các kí tự dưới dạng mã máy).

1. Định dạng biến

Định dạng number là định dạng có tính chất định lượng, có thể thực hiện các phép toán số học với nó. Thông thường trong R định dạng số có những loại sau: Numeric, Integer, Complex.

  • Biến numeric có dạng thập phân gồm 2 phần: phần nguyên và phần thập phân.

  • Biến Integer là biến số nguyên, không có phần thập phân phía sau.

  • Biến complex là biến số phức gồm phần số thực và phần phức.

Để phân biệt các loại biến này chúng ta đi vào các ví dụ sau

#Biến numeric
x <- 12.3
class(x)
## [1] "numeric"
#Biến integer
x <- 1L
class(x)
## [1] "integer"
#Biến complex
x <- 3+2i
class(x)
## [1] "complex"

Định dạng đúng sai: là giá trị biến kiểu logical

x <- TRUE
class(x)
## [1] "logical"

Định dạng raw: là kiểu định dạng đã mã hóa các kí tự dưới dạng số.

x <- "Hi, I'm Khanh 1993"
x <- charToRaw(x)
x
##  [1] 48 69 2c 20 49 27 6d 20 4b 68 61 6e 68 20 31 39 39 33

2. Nguyên tắc đặt tên biến

Mỗi một biến của R khi được khởi tạo sẽ được đặt tên. Nhờ vào tên gọi của biến mà R có thể thao tác với biến được dễ dàng. Tên của một biến bao gồm các kí tự, số, dấu chấm (.), gạch chân (_). Một biến bắt đầu với một kí tự hoặc dấu chấm thì theo sau nó không thể là một số.

#tên gồm các kí tự và chữ số
varname1 <- c(1)
varname1
## [1] 1
  • Không được bắt đầu bằng số chẳng hạn 2varname

  • Bắt đầu bằng dấu chấm hoặc kí tự thì theo sau không được là số chẳng hạn .2varname

  • Không được bắt đầu bằng ki tự gạch chân chẳng hạn **_varname**

  • Không được chứa các kí tự khác các kí tự số, chữ, dấu chấm và gạch chân chẳng hạn %varname

3. Vector

Vector là kiểu dữ liệu chứa nhiều phần tử trong nó. Các phần tử trong cùng 1 vector phải cùng kiểu. Cách tạo một vector:

#Tạo một vector
x <- c(1,2,3)
x
## [1] 1 2 3
#TÌm hiểu kiểu của x:
class(x)
## [1] "numeric"
#Khi các phần tử trong 1 Vector lưu các biến khác kiểu:
x <- c(1,2,"Khanh")
x
## [1] "1"     "2"     "Khanh"
#các giá trị số sẽ tự động được chuyển sang kí tự
class(x[1])
## [1] "character"
class(x[2])
## [1] "character"