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:
Nhóm data: Chứa các dữ liệu matrix,array, data.frame, xts,… là các dữ liệu có từ ít nhất 2 chiều trở lên (gồm dòng và cột và các chiều khác). Thường là các dữ liệu input cho các model và xử lý thống kê, đồ thị của R.
Nhóm value: vector,num, char,int, factor(dùng cho các biến có dạng phân loại, gán nhãn), list,… là các dữ liệu có 1 chiều (vector, list) hoặc là biến (num, char,int,…).
Nhóm function: các hàm số trong R, sử dụng để biến đổi dữ liệu thành các kết quả.
Đố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ề.
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)].
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
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:
Tên của cột không được empty
Tên của dòng phải là duy nhất.
Kiểu dữ liệu của cột store trong data frame phải là numeric, factor và character.
Độ 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
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:
#Truy cập vào phần tử thứ nhất của list:
newList[1]
## $STT
## [1] 1 2 3
#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"
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).
Đị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
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
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"