R語言基礎| 創建數據集

在R語言中,有多種數據類型,用以存儲和處理數據。每種數據類型都有其特定的用途和操作函數,使得R語言在處理各種數據分析任務時非常靈活和強大:

向量(Vector): 向量是R語言中最基本的數據類型,它是由相同類型的元素構成的一維數組。例如,一個由數值組成的向量或一個由字符串組成的向量。

矩陣(Matrix): 矩陣是一個二維數組,其中的數據元素按照行和列的形式排列。矩陣中的所有元素必須是同一類型。

數組(Array): 數組是向量的一種擴展,可以有多維。例如,你可以有一個三維數組,其中包含多個二維矩陣。

數據框(Data Frame): 數據框是R語言中用于存儲表格數據的最重要的數據類型。它類似于數據庫中的表或Excel中的電子表格。數據框可以包含不同類型的列(數值、字符、邏輯等)。

列表(List): 列表是一種復合數據類型,可以包含任意類型的元素(數值、字符、向量、矩陣、甚至其他列表等),并且各元素的長度也可以不同。

因子(Factor): 因子是用于分類數據的數據類型。它們用于表示有限的分類值集,例如性別(男、女)、評級(優、良、差)等。

邏輯值(Logical): 邏輯值是R語言中的布爾類型,代表真(TRUE)或假(FALSE)。

2.1 理解數據集

行(row):表示觀測值 列(col):表示變量

2.2 數據結構

包括標量、向量、矩陣、數組、數據框、列表。

2.2.1 向量(vector)

  • 2.2.1.1 定義

是用于存儲數值型、字符型邏輯型數據的一維數組。例如:

a <- c(1,2,3,4,5,6,-2,4)
b <- c("one","two","three","four")
c <- c(TRUE,TRUE,TRUE,FALSE,FALSE)

a為數值型向量,b字符型(必須加”“),c邏輯型向量。

單個向量中的數據類型必須相同

標量(scalar)是只含一個元素的向量。eg g<-1

  • 2.2.1.2 訪問向量中的元素

注:R中位置索引從1開始,而不是0

1)訪問單個元素

a <- c("k","q","e","f","a","w","p","m")
a[3]
## [1] "e"

2)訪問多個元素

a <- c("k","q","e","f","a","w","p","m")
a[c(1,2,4,6)]
## [1] "k" "q" "f" "w"

3)連續訪問多個元素

a <- c("k","q","e","f","a","w","p","m")
a[c(2:6)]
## [1] "q" "e" "f" "a" "w"

2.2.2 矩陣(matrix)

  • 2.2.2.1 定義

是一個二維數組,只是每個元素都擁有相同的模式(數值型、字符型或邏輯型)。

可以通過函數matrix()創建矩陣,格式如下:

mymatrix <- matrix(vector,nrow = number_of_rows,ncol = number_of_columns,byrow = logical_value,dimnames = list(char_vector_rownames,char_vector_colnames))

vector:矩陣的元素

nrow:行的維數

ncol:列的維數

dimnames:可選的、以字符型向量表示的行名和列名,如果沒有設定可以不寫

byrow = TRUE:矩陣按行填充,byrow = FALSE:矩陣按列填充。**如果不做設定,默認情況下按列填充。

因此,創建矩陣時至少包括vector,nrow,ncol

  • 2.2.2.2 創建矩陣
y <- matrix(1:20,nrow = 5,ncol = 4)
y
## ? ? ?[,1] [,2] [,3] [,4]
## [1,] ? ?1 ? ?6 ? 11 ? 16
## [2,] ? ?2 ? ?7 ? 12 ? 17
## [3,] ? ?3 ? ?8 ? 13 ? 18
## [4,] ? ?4 ? ?9 ? 14 ? 19
## [5,] ? ?5 ? 10 ? 15 ? 20
cells <- c(1,26,24,68)
rnames <- c("R1","R2")
cnames <- c("C1","C2")
mymatrix1 <- matrix(cells,nrow = 2,ncol = 2,byrow = FALSE,dimnames = list(rnames,cnames))
mymatrix1
## ? ?C1 C2
## R1 ?1 24
## R2 26 68

可以看到優先按列填充,且行名為rnames,列名為cnames。

下面改變一些參數:

cells <- c(1,26,24,68)
rnames <- c("R1","R2")
cnames <- c("C1","C2")
mymatrix2 <- matrix(cells,nrow = 2,ncol = 2,byrow = TRUE,dimnames = list(cnames,rnames))
mymatrix2
## ? ?R1 R2
## C1 ?1 26
## C2 24 68

可以看的變成了優先按行填充,行名變為cnames,列名變為rnames。

2.2.3 訪問矩陣中的元素

使用下標和方括號來選擇矩陣中的行、列或元素。

x[i,]:矩陣x中的第i行

x[,j]:矩陣x中的第j列

x[i,j]:矩陣x中第i行第j列個元素

x[i,c(h,j)]:矩陣x中第i行,第h和j列

x[c(h:i),j]:矩陣x中第h-i行,第j列

舉例

x <- matrix(21:40,nrow = 4,ncol = 5 )
x
## ? ? ?[,1] [,2] [,3] [,4] [,5]
## [1,] ? 21 ? 25 ? 29 ? 33 ? 37
## [2,] ? 22 ? 26 ? 30 ? 34 ? 38
## [3,] ? 23 ? 27 ? 31 ? 35 ? 39
## [4,] ? 24 ? 28 ? 32 ? 36 ? 40
x[1,]
## [1] 21 25 29 33 37
x[,5]
## [1] 37 38 39 40
x[c(1,2,3),5]
## [1] 37 38 39
x[c(2:4),c(2:4)]
## ? ? ?[,1] [,2] [,3]
## [1,] ? 26 ? 30 ? 34
## [2,] ? 27 ? 31 ? 35
## [3,] ? 28 ? 32 ? 36

矩陣也只能包含一種數據類型,當維度超過2時,可以使用數組

2.2.3 數組(array)

  • 2.2.3.1 定義

數組(array)與矩陣類似,但是維度可以大于2,即可以是三維的。

通過函數array()創建:

myarray <- array(vector,dimensions,dimnames)

vector:數組中的數據

dimensions:數值型向量,給出了各個維度下標的最大值,按行,列,面進行排序

dimnames:可選的、各維度名稱標簽的列表

  • 2.2.3.2 創建數組
dim1 <- c("A1","A2")
dim2 <- c("B1","B2","B3")
dim3 <- c("C1","C2","C3","C4")
z <- array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))
z
## , , C1
## 
## ? ?B1 B2 B3
## A1 ?1 ?3 ?5
## A2 ?2 ?4 ?6
## 
## , , C2
## 
## ? ?B1 B2 B3
## A1 ?7 ?9 11
## A2 ?8 10 12
## 
## , , C3
## 
## ? ?B1 B2 B3
## A1 13 15 17
## A2 14 16 18
## 
## , , C4
## 
## ? ?B1 B2 B3
## A1 19 21 23
## A2 20 22 24

可以看到這里c(2,3,4)表示的3個維度分別為2,3,4個,即2行3列4面。

  • 2.2.3.3 訪問數組中的元素

和矩陣類似,使用下標和方括號來選擇。

z[1,3,4]
## [1] 23

這表示選擇是維度1中的1(第一行),維度2中的3(第三列),維度3中的4(第4個矩陣)?可以某種程度上將數組看出幾個矩陣的組合。

2.2.4 數據框(data)

  • 2.2.4.1 定義

數據框的不同列可以包含不同模式(數值型、字符型、邏輯型)數據,更類似于常見的數據集。

通過函數data.frame()創建:

mydata <- data.frame(col1,col2,col3,...)

col1,col2,col3,…:列向量,可以為任何類型的數據,每一列的名稱由函數names指定。?但通常不同列(變量)的向量中的數據(觀測值)個數相同,且每一列數據的模式必須相同

  • 2.2.4.2 創建數據框
patientID <- c(1,2,3,4)
age <- c(25,34,28,52)
diabetes <- c("Type1","Type2","Type1","Type1")
status <- c("Poor","Improved","Excellent","Poor")
patientdata <- data.frame(patientID,age,diabetes,status)
patientdata
## ? patientID age diabetes ? ?status
## 1 ? ? ? ? 1 ?25 ? ?Type1 ? ? ?Poor
## 2 ? ? ? ? 2 ?34 ? ?Type2 ?Improved
## 3 ? ? ? ? 3 ?28 ? ?Type1 Excellent
## 4 ? ? ? ? 4 ?52 ? ?Type1 ? ? ?Poor
  • 2.2.4.3 選取數據框中的元素

1)用方括號和下標來選取,[n]和[n1:n2]格式下標的數字表示第n1到n2變量(列)

patientdata[1:2]
## ? patientID age
## 1 ? ? ? ? 1 ?25
## 2 ? ? ? ? 2 ?34
## 3 ? ? ? ? 3 ?28
## 4 ? ? ? ? 4 ?52
patientdata[4]
## ? ? ?status
## 1 ? ? ?Poor
## 2 ?Improved
## 3 Excellent
## 4 ? ? ?Poor

而[n1,n2]則選取的依然是第n1行,n2列對應的元素

patientdata[3,4]
## [1] "Excellent"

2)直接利用函數制定特定變量名來獲取

patientdata[c("age","status")]
## ? age ? ?status
## 1 ?25 ? ? ?Poor
## 2 ?34 ?Improved
## 3 ?28 Excellent
## 4 ?52 ? ? ?Poor

注意變量名是字符型數據,所以要加”“

3)利用$符號+變量名(不用雙引號)

patientdata$status
## [1] "Poor" ? ? ?"Improved" ?"Excellent" "Poor"

with()函數

在每個變量名前都輸入一次patientdata$比較繁瑣,可以借助with()函數簡化代碼

以內置數據框mtcars為例:

mtcars
## ? ? ? ? ? ? ? ? ? ? ?mpg cyl ?disp ?hp drat ? ?wt ?qsec vs am gear carb
## Mazda RX4 ? ? ? ? ? 21.0 ? 6 160.0 110 3.90 2.620 16.46 ?0 ?1 ? ?4 ? ?4
## Mazda RX4 Wag ? ? ? 21.0 ? 6 160.0 110 3.90 2.875 17.02 ?0 ?1 ? ?4 ? ?4
## Datsun 710 ? ? ? ? ?22.8 ? 4 108.0 ?93 3.85 2.320 18.61 ?1 ?1 ? ?4 ? ?1
## Hornet 4 Drive ? ? ?21.4 ? 6 258.0 110 3.08 3.215 19.44 ?1 ?0 ? ?3 ? ?1
## Hornet Sportabout ? 18.7 ? 8 360.0 175 3.15 3.440 17.02 ?0 ?0 ? ?3 ? ?2
## Valiant ? ? ? ? ? ? 18.1 ? 6 225.0 105 2.76 3.460 20.22 ?1 ?0 ? ?3 ? ?1
## Duster 360 ? ? ? ? ?14.3 ? 8 360.0 245 3.21 3.570 15.84 ?0 ?0 ? ?3 ? ?4
## Merc 240D ? ? ? ? ? 24.4 ? 4 146.7 ?62 3.69 3.190 20.00 ?1 ?0 ? ?4 ? ?2
## Merc 230 ? ? ? ? ? ?22.8 ? 4 140.8 ?95 3.92 3.150 22.90 ?1 ?0 ? ?4 ? ?2
## Merc 280 ? ? ? ? ? ?19.2 ? 6 167.6 123 3.92 3.440 18.30 ?1 ?0 ? ?4 ? ?4
## Merc 280C ? ? ? ? ? 17.8 ? 6 167.6 123 3.92 3.440 18.90 ?1 ?0 ? ?4 ? ?4
## Merc 450SE ? ? ? ? ?16.4 ? 8 275.8 180 3.07 4.070 17.40 ?0 ?0 ? ?3 ? ?3
## Merc 450SL ? ? ? ? ?17.3 ? 8 275.8 180 3.07 3.730 17.60 ?0 ?0 ? ?3 ? ?3
## Merc 450SLC ? ? ? ? 15.2 ? 8 275.8 180 3.07 3.780 18.00 ?0 ?0 ? ?3 ? ?3
## Cadillac Fleetwood ?10.4 ? 8 472.0 205 2.93 5.250 17.98 ?0 ?0 ? ?3 ? ?4
## Lincoln Continental 10.4 ? 8 460.0 215 3.00 5.424 17.82 ?0 ?0 ? ?3 ? ?4
## Chrysler Imperial ? 14.7 ? 8 440.0 230 3.23 5.345 17.42 ?0 ?0 ? ?3 ? ?4
## Fiat 128 ? ? ? ? ? ?32.4 ? 4 ?78.7 ?66 4.08 2.200 19.47 ?1 ?1 ? ?4 ? ?1
## Honda Civic ? ? ? ? 30.4 ? 4 ?75.7 ?52 4.93 1.615 18.52 ?1 ?1 ? ?4 ? ?2
## Toyota Corolla ? ? ?33.9 ? 4 ?71.1 ?65 4.22 1.835 19.90 ?1 ?1 ? ?4 ? ?1
## Toyota Corona ? ? ? 21.5 ? 4 120.1 ?97 3.70 2.465 20.01 ?1 ?0 ? ?3 ? ?1
## Dodge Challenger ? ?15.5 ? 8 318.0 150 2.76 3.520 16.87 ?0 ?0 ? ?3 ? ?2
## AMC Javelin ? ? ? ? 15.2 ? 8 304.0 150 3.15 3.435 17.30 ?0 ?0 ? ?3 ? ?2
## Camaro Z28 ? ? ? ? ?13.3 ? 8 350.0 245 3.73 3.840 15.41 ?0 ?0 ? ?3 ? ?4
## Pontiac Firebird ? ?19.2 ? 8 400.0 175 3.08 3.845 17.05 ?0 ?0 ? ?3 ? ?2
## Fiat X1-9 ? ? ? ? ? 27.3 ? 4 ?79.0 ?66 4.08 1.935 18.90 ?1 ?1 ? ?4 ? ?1
## Porsche 914-2 ? ? ? 26.0 ? 4 120.3 ?91 4.43 2.140 16.70 ?0 ?1 ? ?5 ? ?2
## Lotus Europa ? ? ? ?30.4 ? 4 ?95.1 113 3.77 1.513 16.90 ?1 ?1 ? ?5 ? ?2
## Ford Pantera L ? ? ?15.8 ? 8 351.0 264 4.22 3.170 14.50 ?0 ?1 ? ?5 ? ?4
## Ferrari Dino ? ? ? ?19.7 ? 6 145.0 175 3.62 2.770 15.50 ?0 ?1 ? ?5 ? ?6
## Maserati Bora ? ? ? 15.0 ? 8 301.0 335 3.54 3.570 14.60 ?0 ?1 ? ?5 ? ?8
## Volvo 142E ? ? ? ? ?21.4 ? 4 121.0 109 4.11 2.780 18.60 ?1 ?1 ? ?4 ? ?2
summary(mtcars$mpg)
## ? ?Min. 1st Qu. ?Median ? ?Mean 3rd Qu. ? ?Max. 
## ? 10.40 ? 15.43 ? 19.20 ? 20.09 ? 22.80 ? 33.90
plot(mtcars$mpg,mtcars$disp)

圖片

plot(mtcars$mpg,mtcars$wt)

圖片

summary()獲取描述性統計量,可以提供最小值、最大值、四分位數和數值型變量的均值,以及因子向量和邏輯型向量的頻數統計等。結果輸出中的1Q和Q3分別為殘差第一四分位數(1Q)和第三分位數(Q3)。

利用with()函數可以簡化為:

with(mtcars,{summary(mpg)plot(mpg,disp)plot(mpg,wt)})

圖片

圖片

{}中的命令都是針對mtcars執行,如果僅有一條命令,那么{}可省略。

函數with()的局限性在于賦值僅在此函數的括號里生效,例如:

with(mtcars,{stats <- summary(mpg)
stats})
## ? ?Min. 1st Qu. ?Median ? ?Mean 3rd Qu. ? ?Max. 
## ? 10.40 ? 15.43 ? 19.20 ? 20.09 ? 22.80 ? 33.90
stats
## Error in eval(expr, envir, enclos): 找不到對象'stats'

如果需要創建with()以外存在的對象,可使用特殊賦值符號?<<-替代原來的<- ,即可將對象保存到with()之外的全局環境中,例如:

with(mtcars,{stats <<- summary(mpg)
stats})
## ? ?Min. 1st Qu. ?Median ? ?Mean 3rd Qu. ? ?Max. 
## ? 10.40 ? 15.43 ? 19.20 ? 20.09 ? 22.80 ? 33.90
stats
## ? ?Min. 1st Qu. ?Median ? ?Mean 3rd Qu. ? ?Max. 
## ? 10.40 ? 15.43 ? 19.20 ? 20.09 ? 22.80 ? 33.90

2.2.5 因子(factor)

  • 2.2.5.1 定義

談因子前首先要對變量進行分類,可以分為:

變量分類定義包括具體舉例

名義變量(分類變量)

nominal variable

沒有順序之分的分類變量性別,省份,職業、分型等Diabetes(Type1、Type2)

順序變量

ordinal variable

一種順序關系而非數量關系班級,名次,病情等Status(poor、improved、excellent)

連續變量

continuous variable

可呈現為某個范圍內的任意值,并同時表示了順序和數量連續的數值,可以進行求和,平均值等運算age(15、21、33)

其中名義變量和順序變量稱為因子

  • 2.2.5.1.1 名義變量作為因子時

函數factor()以一個整數向量的形式存儲類別值,整數的取值范圍是1…k。同時,一個由字符串(原始值)組成的內部向量將映射到這些整數上。

舉例:

diabetes <- c("Type1","Type2","Type1","Type1")
diabetes1 <- factor(diabetes)
str(diabetes)
## ?chr [1:4] "Type1" "Type2" "Type1" "Type1"
str(diabetes1)
## ?Factor w/ 2 levels "Type1","Type2": 1 2 1 1

可以看到用factor()將向量存儲為(1,2,1,1),并在內部將其關聯為1=Type1,2=Type2.

  • 2.2.5.1.2 順序變量作為因子時

表示順序變量時,要指定ordered=TRUE

status<- c("poor","improved","excellent","poor")
status1 <- factor(status,ordered = TRUE)
str(status)
## ?chr [1:4] "poor" "improved" "excellent" "poor"
str(status1)
## ?Ord.factor w/ 3 levels "excellent"<"improved"<..: 3 2 1 3

對于字符型向量,因子的水平(level)默認依字母順序創建,但很少情況是理想的,可以用levels選項覆蓋默認排序,重新排序:

status<- c("poor","improved","excellent","poor")
status2 <- factor(status,ordered = TRUE,levels = c("poor","improved","excellent"))
str(status)
## ?chr [1:4] "poor" "improved" "excellent" "poor"
str(status2)
## ?Ord.factor w/ 3 levels "poor"<"improved"<..: 1 2 3 1

這樣排序從原來的3213變成了1231。

數值型變量可以用參數levels和labels來編碼因子?例如,男性被編碼為1,女性被編碼為2:

sex <- c(1,2,2,1)
sex<- factor(sex,levels = c(1,2),labels = c("Male","Female"))
sex
## [1] Male ? Female Female Male ?
## Levels: Male Female

歸根結底,因子和非因子到底什么區別?我們用一張圖就可以直觀感受?plot函數的數據集是向量的作圖輸出散點圖:

mtcars$cyl
## ?[1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
plot(mtcars$cyl)

圖片

plot函數的數據集是因子的作圖輸出條形圖:

mtcars$cyl
## ?[1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
mtcars1 <- factor(mtcars$cyl)
plot(mtcars1)

圖片

2.2.6 列表(list)

  • 2.2.6.1 定義

一些對象(或成分)的有序集合。一個列表中可能包含若干對象(可能無關的)如向量,矩陣,數據框甚至其他列表。

用函數list()創建,也可以對列表中的對象命名:

mylist <- list(object1,object2,...)
mylist <- list(name1=object1,name2=object2,...)
  • 2.2.6.2 創建一個列表
g <- "My Frist list"
h <- c(25,23,11,13)
j <- matrix(1:10,nrow = 5)
k <- c("one","two","three")
mylist <- list(title=g,ages=h,j,k)
mylist
## $title
## [1] "My Frist list"
## 
## $ages
## [1] 25 23 11 13
## 
## [[3]]
## ? ? ?[,1] [,2]
## [1,] ? ?1 ? ?6
## [2,] ? ?2 ? ?7
## [3,] ? ?3 ? ?8
## [4,] ? ?4 ? ?9
## [5,] ? ?5 ? 10
## 
## [[4]]
## [1] "one" ? "two" ? "three"

這個列表中包含了字符型、數值型向量,矩陣。

  • 2.2.6.3 選取列表中的元素

一般用[[]],雙重方括號加數字或名稱來訪問

mylist[[2]]
## [1] 25 23 11 13
mylist[["title"]]
## [1] "My Frist list"
mylist["title"]
## $title
## [1] "My Frist list"

2.2.7 tibble數據框

  • 2.2.7.1 定義

與標準數據框相比,tibble數據框的打印格式更加緊湊。且變量標簽描述了每一列的數據類型。

安裝tibble包:

install.packages("tibble")

用函數tibble()或as_tibble()創建

舉例來看:

mtcars
## ? ? ? ? ? ? ? ? ? ? ?mpg cyl ?disp ?hp drat ? ?wt ?qsec vs am gear carb
## Mazda RX4 ? ? ? ? ? 21.0 ? 6 160.0 110 3.90 2.620 16.46 ?0 ?1 ? ?4 ? ?4
## Mazda RX4 Wag ? ? ? 21.0 ? 6 160.0 110 3.90 2.875 17.02 ?0 ?1 ? ?4 ? ?4
## Datsun 710 ? ? ? ? ?22.8 ? 4 108.0 ?93 3.85 2.320 18.61 ?1 ?1 ? ?4 ? ?1
## Hornet 4 Drive ? ? ?21.4 ? 6 258.0 110 3.08 3.215 19.44 ?1 ?0 ? ?3 ? ?1
## Hornet Sportabout ? 18.7 ? 8 360.0 175 3.15 3.440 17.02 ?0 ?0 ? ?3 ? ?2
## Valiant ? ? ? ? ? ? 18.1 ? 6 225.0 105 2.76 3.460 20.22 ?1 ?0 ? ?3 ? ?1
## Duster 360 ? ? ? ? ?14.3 ? 8 360.0 245 3.21 3.570 15.84 ?0 ?0 ? ?3 ? ?4
## Merc 240D ? ? ? ? ? 24.4 ? 4 146.7 ?62 3.69 3.190 20.00 ?1 ?0 ? ?4 ? ?2
## Merc 230 ? ? ? ? ? ?22.8 ? 4 140.8 ?95 3.92 3.150 22.90 ?1 ?0 ? ?4 ? ?2
## Merc 280 ? ? ? ? ? ?19.2 ? 6 167.6 123 3.92 3.440 18.30 ?1 ?0 ? ?4 ? ?4
## Merc 280C ? ? ? ? ? 17.8 ? 6 167.6 123 3.92 3.440 18.90 ?1 ?0 ? ?4 ? ?4
## Merc 450SE ? ? ? ? ?16.4 ? 8 275.8 180 3.07 4.070 17.40 ?0 ?0 ? ?3 ? ?3
## Merc 450SL ? ? ? ? ?17.3 ? 8 275.8 180 3.07 3.730 17.60 ?0 ?0 ? ?3 ? ?3
## Merc 450SLC ? ? ? ? 15.2 ? 8 275.8 180 3.07 3.780 18.00 ?0 ?0 ? ?3 ? ?3
## Cadillac Fleetwood ?10.4 ? 8 472.0 205 2.93 5.250 17.98 ?0 ?0 ? ?3 ? ?4
## Lincoln Continental 10.4 ? 8 460.0 215 3.00 5.424 17.82 ?0 ?0 ? ?3 ? ?4
## Chrysler Imperial ? 14.7 ? 8 440.0 230 3.23 5.345 17.42 ?0 ?0 ? ?3 ? ?4
## Fiat 128 ? ? ? ? ? ?32.4 ? 4 ?78.7 ?66 4.08 2.200 19.47 ?1 ?1 ? ?4 ? ?1
## Honda Civic ? ? ? ? 30.4 ? 4 ?75.7 ?52 4.93 1.615 18.52 ?1 ?1 ? ?4 ? ?2
## Toyota Corolla ? ? ?33.9 ? 4 ?71.1 ?65 4.22 1.835 19.90 ?1 ?1 ? ?4 ? ?1
## Toyota Corona ? ? ? 21.5 ? 4 120.1 ?97 3.70 2.465 20.01 ?1 ?0 ? ?3 ? ?1
## Dodge Challenger ? ?15.5 ? 8 318.0 150 2.76 3.520 16.87 ?0 ?0 ? ?3 ? ?2
## AMC Javelin ? ? ? ? 15.2 ? 8 304.0 150 3.15 3.435 17.30 ?0 ?0 ? ?3 ? ?2
## Camaro Z28 ? ? ? ? ?13.3 ? 8 350.0 245 3.73 3.840 15.41 ?0 ?0 ? ?3 ? ?4
## Pontiac Firebird ? ?19.2 ? 8 400.0 175 3.08 3.845 17.05 ?0 ?0 ? ?3 ? ?2
## Fiat X1-9 ? ? ? ? ? 27.3 ? 4 ?79.0 ?66 4.08 1.935 18.90 ?1 ?1 ? ?4 ? ?1
## Porsche 914-2 ? ? ? 26.0 ? 4 120.3 ?91 4.43 2.140 16.70 ?0 ?1 ? ?5 ? ?2
## Lotus Europa ? ? ? ?30.4 ? 4 ?95.1 113 3.77 1.513 16.90 ?1 ?1 ? ?5 ? ?2
## Ford Pantera L ? ? ?15.8 ? 8 351.0 264 4.22 3.170 14.50 ?0 ?1 ? ?5 ? ?4
## Ferrari Dino ? ? ? ?19.7 ? 6 145.0 175 3.62 2.770 15.50 ?0 ?1 ? ?5 ? ?6
## Maserati Bora ? ? ? 15.0 ? 8 301.0 335 3.54 3.570 14.60 ?0 ?1 ? ?5 ? ?8
## Volvo 142E ? ? ? ? ?21.4 ? 4 121.0 109 4.11 2.780 18.60 ?1 ?1 ? ?4 ? ?2
library(tibble)
mtcars2 <- tibble(mtcars)
mtcars2
## # A tibble: 32 × 11
## ? ? ?mpg ? cyl ?disp ? ?hp ?drat ? ?wt ?qsec ? ?vs ? ?am ?gear ?carb
## ? ?<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## ?1 ?21 ? ? ? 6 ?160 ? ?110 ?3.9 ? 2.62 ?16.5 ? ? 0 ? ? 1 ? ? 4 ? ? 4
## ?2 ?21 ? ? ? 6 ?160 ? ?110 ?3.9 ? 2.88 ?17.0 ? ? 0 ? ? 1 ? ? 4 ? ? 4
## ?3 ?22.8 ? ? 4 ?108 ? ? 93 ?3.85 ?2.32 ?18.6 ? ? 1 ? ? 1 ? ? 4 ? ? 1
## ?4 ?21.4 ? ? 6 ?258 ? ?110 ?3.08 ?3.22 ?19.4 ? ? 1 ? ? 0 ? ? 3 ? ? 1
## ?5 ?18.7 ? ? 8 ?360 ? ?175 ?3.15 ?3.44 ?17.0 ? ? 0 ? ? 0 ? ? 3 ? ? 2
## ?6 ?18.1 ? ? 6 ?225 ? ?105 ?2.76 ?3.46 ?20.2 ? ? 1 ? ? 0 ? ? 3 ? ? 1
## ?7 ?14.3 ? ? 8 ?360 ? ?245 ?3.21 ?3.57 ?15.8 ? ? 0 ? ? 0 ? ? 3 ? ? 4
## ?8 ?24.4 ? ? 4 ?147. ? ?62 ?3.69 ?3.19 ?20 ? ? ? 1 ? ? 0 ? ? 4 ? ? 2
## ?9 ?22.8 ? ? 4 ?141. ? ?95 ?3.92 ?3.15 ?22.9 ? ? 1 ? ? 0 ? ? 4 ? ? 2
## 10 ?19.2 ? ? 6 ?168. ? 123 ?3.92 ?3.44 ?18.3 ? ? 1 ? ? 0 ? ? 4 ? ? 4
## # ? 22 more rows

這里變量名下的<>中的內容代表變量類型:

縮寫變量類型
int整數型變量
dbl雙精度浮點數型變量,或稱實數
chr字符向量,或稱字符串
dttm日期時間(日期+ 時間)型變量
date日期型變量
lgl邏輯型變量,是一個僅包括TRUE 和FALSE 的向量
fctr因子,R 用其來表示具有固定數目的值的分類變量

可以看到tibble數據框有幾個特點:

1)不支持行名,可以用rownames_to_column()將數據框的行名轉變為變量。

library(tibble)
mtcars2 <- tibble(mtcars)
mtcars2
## # A tibble: 32 × 11
## ? ? ?mpg ? cyl ?disp ? ?hp ?drat ? ?wt ?qsec ? ?vs ? ?am ?gear ?carb
## ? ?<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## ?1 ?21 ? ? ? 6 ?160 ? ?110 ?3.9 ? 2.62 ?16.5 ? ? 0 ? ? 1 ? ? 4 ? ? 4
## ?2 ?21 ? ? ? 6 ?160 ? ?110 ?3.9 ? 2.88 ?17.0 ? ? 0 ? ? 1 ? ? 4 ? ? 4
## ?3 ?22.8 ? ? 4 ?108 ? ? 93 ?3.85 ?2.32 ?18.6 ? ? 1 ? ? 1 ? ? 4 ? ? 1
## ?4 ?21.4 ? ? 6 ?258 ? ?110 ?3.08 ?3.22 ?19.4 ? ? 1 ? ? 0 ? ? 3 ? ? 1
## ?5 ?18.7 ? ? 8 ?360 ? ?175 ?3.15 ?3.44 ?17.0 ? ? 0 ? ? 0 ? ? 3 ? ? 2
## ?6 ?18.1 ? ? 6 ?225 ? ?105 ?2.76 ?3.46 ?20.2 ? ? 1 ? ? 0 ? ? 3 ? ? 1
## ?7 ?14.3 ? ? 8 ?360 ? ?245 ?3.21 ?3.57 ?15.8 ? ? 0 ? ? 0 ? ? 3 ? ? 4
## ?8 ?24.4 ? ? 4 ?147. ? ?62 ?3.69 ?3.19 ?20 ? ? ? 1 ? ? 0 ? ? 4 ? ? 2
## ?9 ?22.8 ? ? 4 ?141. ? ?95 ?3.92 ?3.15 ?22.9 ? ? 1 ? ? 0 ? ? 4 ? ? 2
## 10 ?19.2 ? ? 6 ?168. ? 123 ?3.92 ?3.44 ?18.3 ? ? 1 ? ? 0 ? ? 4 ? ? 4
## # ? 22 more rows
rownames_to_column(mtcars2)
## # A tibble: 32 × 12
## ? ?rowname ? mpg ? cyl ?disp ? ?hp ?drat ? ?wt ?qsec ? ?vs ? ?am ?gear ?carb
## ? ?<chr> ? <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## ?1 1 ? ? ? ?21 ? ? ? 6 ?160 ? ?110 ?3.9 ? 2.62 ?16.5 ? ? 0 ? ? 1 ? ? 4 ? ? 4
## ?2 2 ? ? ? ?21 ? ? ? 6 ?160 ? ?110 ?3.9 ? 2.88 ?17.0 ? ? 0 ? ? 1 ? ? 4 ? ? 4
## ?3 3 ? ? ? ?22.8 ? ? 4 ?108 ? ? 93 ?3.85 ?2.32 ?18.6 ? ? 1 ? ? 1 ? ? 4 ? ? 1
## ?4 4 ? ? ? ?21.4 ? ? 6 ?258 ? ?110 ?3.08 ?3.22 ?19.4 ? ? 1 ? ? 0 ? ? 3 ? ? 1
## ?5 5 ? ? ? ?18.7 ? ? 8 ?360 ? ?175 ?3.15 ?3.44 ?17.0 ? ? 0 ? ? 0 ? ? 3 ? ? 2
## ?6 6 ? ? ? ?18.1 ? ? 6 ?225 ? ?105 ?2.76 ?3.46 ?20.2 ? ? 1 ? ? 0 ? ? 3 ? ? 1
## ?7 7 ? ? ? ?14.3 ? ? 8 ?360 ? ?245 ?3.21 ?3.57 ?15.8 ? ? 0 ? ? 0 ? ? 3 ? ? 4
## ?8 8 ? ? ? ?24.4 ? ? 4 ?147. ? ?62 ?3.69 ?3.19 ?20 ? ? ? 1 ? ? 0 ? ? 4 ? ? 2
## ?9 9 ? ? ? ?22.8 ? ? 4 ?141. ? ?95 ?3.92 ?3.15 ?22.9 ? ? 1 ? ? 0 ? ? 4 ? ? 2
## 10 10 ? ? ? 19.2 ? ? 6 ?168. ? 123 ?3.92 ?3.44 ?18.3 ? ? 1 ? ? 0 ? ? 4 ? ? 4
## # ? 22 more rows

2)不會更改變量的名稱。例如導入的數據集中有一變量名為last dance,在R中變量名中不得有空格,因此普通數據集函數會將其改為last.dance,而tibble數據框會保留這樣的命名,并用反引號(last dance)使變量名在語法上正確。

3)tibble數據框取子集總是返回一個tibble數據框。

例如,普通的數據框取子集時一般返回向量,除非加上drop=FALSE,才會以列表的形式返回:

mtcars[,"mpg"]
## ?[1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
## [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
## [31] 15.0 21.4
mtcars[,"mpg",drop=FALSE]
## ? ? ? ? ? ? ? ? ? ? ?mpg
## Mazda RX4 ? ? ? ? ? 21.0
## Mazda RX4 Wag ? ? ? 21.0
## Datsun 710 ? ? ? ? ?22.8
## Hornet 4 Drive ? ? ?21.4
## Hornet Sportabout ? 18.7
## Valiant ? ? ? ? ? ? 18.1
## Duster 360 ? ? ? ? ?14.3
## Merc 240D ? ? ? ? ? 24.4
## Merc 230 ? ? ? ? ? ?22.8
## Merc 280 ? ? ? ? ? ?19.2
## Merc 280C ? ? ? ? ? 17.8
## Merc 450SE ? ? ? ? ?16.4
## Merc 450SL ? ? ? ? ?17.3
## Merc 450SLC ? ? ? ? 15.2
## Cadillac Fleetwood ?10.4
## Lincoln Continental 10.4
## Chrysler Imperial ? 14.7
## Fiat 128 ? ? ? ? ? ?32.4
## Honda Civic ? ? ? ? 30.4
## Toyota Corolla ? ? ?33.9
## Toyota Corona ? ? ? 21.5
## Dodge Challenger ? ?15.5
## AMC Javelin ? ? ? ? 15.2
## Camaro Z28 ? ? ? ? ?13.3
## Pontiac Firebird ? ?19.2
## Fiat X1-9 ? ? ? ? ? 27.3
## Porsche 914-2 ? ? ? 26.0
## Lotus Europa ? ? ? ?30.4
## Ford Pantera L ? ? ?15.8
## Ferrari Dino ? ? ? ?19.7
## Maserati Bora ? ? ? 15.0
## Volvo 142E ? ? ? ? ?21.4

但在tibble數據框中則可以直接呈現單列的tibble數據框:

mtcars2[,"mpg"]
## # A tibble: 32 × 1
## ? ? ?mpg
## ? ?<dbl>
## ?1 ?21 ?
## ?2 ?21 ?
## ?3 ?22.8
## ?4 ?21.4
## ?5 ?18.7
## ?6 ?18.1
## ?7 ?14.3
## ?8 ?24.4
## ?9 ?22.8
## 10 ?19.2
## # ? 22 more rows

4)不改變輸入的類型(例如,不能將字符串轉換為因子)。在R4.0.0以前的版本中,函數read.table(),as.data.frame()會默認將字符型數據轉換為因子。AsFactors = FALSE可以取消該默認設置。

2.3 數據輸入

這里介紹2種常用的,分別是從帶分隔符的文本文件導入和從excel導入。

文本文件包括:純文本文件,Markdown文件,HTML文件,XML文件,JSON文件,CSV文件,日志文件,配置文件,腳本文件。

2.3.1 從帶分隔符的文本文件導入數據

2.3.1.1 定義

用函數read.table()來導入,此函數讀入一個表格格式的文件并將其保存為一個數據框。語法:

mydataframe <- read.table(file,options)

其中,file是一個帶分隔符的ASCII文本文件,options是控制如何處理數據的選項。常見選項有:

圖片

以studentgrades.csv的文本文件舉例:

grades <- read.table("studentgrades.csv",header = TRUE,row.names = "studentID",sep = ",")
## Warning in read.table("studentgrades.csv", header = TRUE, row.names =
## "studentID", : incomplete final line found by readTableHeader on
## 'studentgrades.csv'
grades
## ? ?First ? ? ? ? ? Last Math Science Social
## 11 ? Bob ? ? ? ? ?Smith ? 90 ? ? ?80 ? ? 67
## 12 ?Jane ? ? ? ? ?Weary ? 75 ? ? ?NA ? ? 80
## 10 ? Dan "Thornton,III" ? 65 ? ? ?75 ? ? 70
## 40 ?Mary ? ? ?"O'Leary" ? 90 ? ? ?95 ? ? 92

studentID現在是行名,不再有標簽,也失去了前置0。

str(grades)
## 'data.frame': ? ?4 obs. of ?5 variables:
## ?$ First ?: chr ?"Bob" "Jane" "Dan" "Mary"
## ?$ Last ? : chr ?"Smith" "Weary" "\"Thornton,III\"" "\"O'Leary\""
## ?$ Math ? : int ?90 75 65 90
## ?$ Science: int ?80 NA 75 95
## ?$ Social : int ?67 80 70 92

注:對于“Thornton,III”要用雙引號包圍住,否則R會將其讀為2個值而出錯。

我們重新導入上面的數據,并同時為每個變量指定一個類:

grades <- read.table("studentgrades.csv",header = TRUE,row.names = "studentID",sep = ",",colClasses = c("character","character","character","numeric","numeric","numeric"))
## Warning in read.table("studentgrades.csv", header = TRUE, row.names =
## "studentID", : incomplete final line found by readTableHeader on
## 'studentgrades.csv'
grades
## ? ? First ? ? ? ? ? Last Math Science Social
## 011 ? Bob ? ? ? ? ?Smith ? 90 ? ? ?80 ? ? 67
## 012 ?Jane ? ? ? ? ?Weary ? 75 ? ? ?NA ? ? 80
## 010 ? Dan "Thornton,III" ? 65 ? ? ?75 ? ? 70
## 040 ?Mary ? ? ?"O'Leary" ? 90 ? ? ?95 ? ? 92
str(grades)
## 'data.frame': ? ?4 obs. of ?5 variables:
## ?$ First ?: chr ?"Bob" "Jane" "Dan" "Mary"
## ?$ Last ? : chr ?"Smith" "Weary" "\"Thornton,III\"" "\"O'Leary\""
## ?$ Math ? : num ?90 75 65 90
## ?$ Science: num ?80 NA 75 95
## ?$ Social : num ?67 80 70 92

可以看到行名保留了前綴0

其他讀取方法:

1)read.csv():默認header=T,sep=“,”

2)read.delim():默認默認header=T,sep=“

3)readr包:其中主要函數是read.delim(),輔助函數為read.csv()和read.tsv(),其優點是速度快,且可以推測每一列的數據類型。

2.3.2 導入Excel數據

2.3.2.1 方法

1)將excel數據導出為一個csv文件后,使用前面方法進行導入

2)用readxl包直接導入excel工作表:readxl可以用來讀取.xls和.xlsx版本的excel文件

語法:

read_table(file,n)

file是excel工作簿的所在路徑,n則為導入的工作表序號,工作表的第一行為變量名。

例如:

install.packages("readxl")
library(readxl)
## Warning: 程輯包'readxl'是用R版本4.3.2 來建造的
a <- "./test.xlsx"
mytest <- read_excel(a,2)
mytest
## # A tibble: 8 × 2
## ? `動物\r\n編號` `體重(g)`
## ? <chr> ? ? ? ? ? ? ? ?<dbl>
## 1 A71 ? ? ? ? ? ? ? ? ? 18.7
## 2 A74 ? ? ? ? ? ? ? ? ? 18.8
## 3 A79 ? ? ? ? ? ? ? ? ? 18 ?
## 4 A80 ? ? ? ? ? ? ? ? ? 18.5
## 5 A81 ? ? ? ? ? ? ? ? ? 18.7
## 6 A82 ? ? ? ? ? ? ? ? ? 18.3
## 7 A83 ? ? ? ? ? ? ? ? ? 20 ?
## 8 A84 ? ? ? ? ? ? ? ? ? 17.5

read_excel()可以指定某個單元區域(range=“mysheet!B2:G14”),例如:

a <- "./test.xlsx"
mytest1 <- read_excel(a,2,range ="A3:B8" )
mytest1
## # A tibble: 5 × 2
## ? A74 ? `18.8`
## ? <chr> ?<dbl>
## 1 A79 ? ? 18 ?
## 2 A80 ? ? 18.5
## 3 A81 ? ? 18.7
## 4 A82 ? ? 18.3
## 5 A83 ? ? 20

另外,xlsx,XLConnect,openxlsx包也可以處理excel文件。

往期回顧

R語言基礎學習手冊

下載、安裝

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83374.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83374.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83374.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nssctf第二題[SWPUCTF 2021 新生賽]簡簡單單的邏輯

這是題目&#xff0c;下載后得到一個python文件,打開 解讀代碼&#xff1a; for i in range(len(list)):key (list[i]>>4)((list[i] & 0xf)<<4)result str(hex(ord(flag[i])^key))[2:].zfill(2)list[i]>>4&#xff1a;從列表中取數字同時高4位向右位…

mysql(十五)

目錄 子查詢 1.準備工作 2--創建表格 3--插入數據 2.where 子查詢單列單個數據 格式 查詢 3.where 子查詢單列多個數據(in) 格式 查詢 使用子查詢 4.from 多行多數據 格式 查詢 子查詢 將select的查詢的返回結果 當成另外一個selet語句的內容去使用。 子查詢放在()里面 注意…

【HarmonyOS 5】鴻蒙Taro跨端框架

?Taro跨端框架? 支持React語法開發鴻蒙應用&#xff0c;架構分為三層&#xff1a; ArkVM層運行業務代碼和React核心TaroElement樹處理節點創建和屬性綁定TaroRenderNode虛擬節點樹與上屏節點一一對應 import { Component } from tarojs/taro export default class MyCompon…

華為OD機試真題——會議接待 /代表團坐車(2025A卷:200分)Java/python/JavaScript/C++/C語言/GO六種最佳實現

2025 A卷 200分 題型 本文涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、測試用例以及綜合分析; 并提供Java、python、JavaScript、C++、C語言、GO六種語言的最佳實現方式! 本文收錄于專欄:《2025華為OD真題目錄+全流程解析/備考攻略/經驗分享》 華為OD機試真題《會議…

C語言---動態內存管理、柔性數組

一、malloc和free 1、變長數組 變長數組是指數組的大小可以通過變量來指定。 在c99以及之后的標準中&#xff1a; #include<stdio.h> int main() { int n0; scanf("%d",&n); } 2、malloc和free 這個函數向內存申請一塊連續可用的空間&#xff0c;并返…

WEBSTORM前端 —— 第3章:移動 Web —— 第4節:移動適配-VM

目錄 一、適配方案 二、VM布局 ?編輯 三、vh布局 四、案例—酷我音樂 一、適配方案 二、VM布局 三、vh布局 四、案例—酷我音樂

Dynamics 365 Business Central AI Sales Order Agent Copilot

#AI Copilot# #D365 BC 26 Wave# 最近很多客戶都陸續升級到 Dynamics 365 Business Central 26 wave, Microsoft 提供一個基于Copilot 的Sales Order Agent&#xff0c;此文將此功能做個介紹. Explorer: 可以看到26版本上面增加了這樣一個新圖標。 Configuration: 配置過程…

【harbor】--配置https

使用自建的 CA 證書來自簽署和啟用 HTTPS 通信。 &#xff08;1&#xff09;生成 CA認證 使用 OpenSSL 生成一個 2048位的私鑰這是 自建 CA&#xff08;證書頒發機構&#xff09; 的私鑰&#xff0c;后續會用它來簽發證書。 # 1創建CA認證 cd 到harbor [rootlocalhost harbo…

Selenium基礎操作方法詳解

Selenium基礎操作方法詳解&#xff1a;從零開始編寫自動化腳本&#xff08;附完整代碼&#xff09; 引言 Selenium是自動化測試和網頁操作的利器&#xff0c;但對于新手來說&#xff0c;掌握基礎操作是成功的第一步。本文將手把手教你使用Selenium完成瀏覽器初始化、元素定位、…

python同步mysql數據

python寫了一個簡單的mysql數據同步腳本,只作為學習練習,大佬勿噴 # -*- coding: utf-8 -*- """ Time:2025/5/29 14:38 Auth:HEhandsome """ import pymysql from pymysql import Connectclass Mysql:def __init__(self):#源數據庫self.sou_hos…

手撕Java+硅基流動實現MCP服務器教程

手撕Java硅基流動實現MCP服務器教程 一、MCP協議核心概念 MCP是什么 MCP 是 Anthropic (Claude) 主導發布的一個開放的、通用的、有共識的協議標準。 ● MCP 是一個標準協議&#xff0c;就像給 AI 大模型裝了一個 “萬能接口”&#xff0c;讓 AI 模型能夠與不同的數據源和工…

.net consul服務注冊與發現

.NET中Consul服務注冊與發現的技術實踐 在微服務架構中&#xff0c;服務的注冊與發現是至關重要的環節&#xff0c;它能幫助各個服務之間實現高效的通信和協作。Consul作為一款功能強大的工具&#xff0c;為我們提供了優秀的服務注冊與發現解決方案。今天&#xff0c;我們就來…

大數據量下的數據修復與回寫Spark on Hive 的大數據量主鍵沖突排查:COUNT(DISTINCT) 的陷阱

背景與問題概述 這一周&#xff08;2025-05-26-2026-05-30&#xff09;我在搞數據擬合修復優化的任務&#xff0c;有大量的數據需要進行數據處理及回寫&#xff0c;大概一個表一天一分區有五六千萬數據&#xff0c;大約一百多列的字段。 具體是這樣的我先取檔案&#x…

基于 AUTOSAR 的域控產品軟件開發:從 CP 到 AP 的跨越

基于 AUTOSAR 的域控產品軟件開發&#xff1a;從 CP 到 AP 的跨越 一、AUTOSAR AP 架構解析&#xff1a;面向智能汽車的自適應框架 &#xff08;一&#xff09;引言 隨著汽車智能化向 L3 演進&#xff0c;傳統 AUTOSAR CP&#xff08;經典平臺&#xff09;在實時性、動態性和…

Nacos 配置管理案例:nacos-spring-cloud-config-example詳解

一、結構說明&#xff1a;基于Spring Cloud Alibaba的微服務示例 nacos-spring-cloud-config-example : 服務提供者 二、技術棧&#xff1a;Spring BootSpring CloudSpring Cloud Alibaba Nacos Actuator&#xff08;可選&#xff1a;監控&#xff09; 三、使用環境 安裝…

BUUCTF[ACTF2020 新生賽]Include 1題解

BUUCTF[ACTF2020 新生賽]Include 1題解 題目分析&#xff1a;知識準備&#xff1a;php://filter 過濾器參數說明常用過濾器功能對照表 開始解題&#xff1a;原理解析構造payload 總結 題目分析&#xff1a; 生成靶機&#xff0c;打開網址&#xff0c;查看源碼&#xff0c;抓包…

vscode + cmake + ninja+ gcc 搭建MCU開發環境

vscode cmake ninja gcc 搭建MCU開發環境 文章目錄 vscode cmake ninja gcc 搭建MCU開發環境1. 前言2. 工具安裝及介紹2.1 gcc2.1.1 gcc 介紹2.1.2 gcc 下載及安裝 2.2 ninja2.2.1 ninja 介紹2.2 ninja 安裝 2.3 cmake2.3.1 cmake 介紹2.3.2 cmake 安裝 2.4 VScode 3. 上手…

九(1). 引用作為函數參數的使用

引用作為參數使用 在 C 中&#xff0c;引用作為函數參數是一種高效且靈活的參數傳遞方式&#xff0c;它避免了拷貝開銷&#xff0c;同時允許函數直接操作原始數據。 以下是關于引用作為參數的詳細使用指南和最佳實踐&#xff1a; 1. 引用作為參數的基本用法 (1) 普通引用&…

Linux多路TTS混音播放:讓多個語音同時清晰可聽

Linux多路TTS混音播放:讓多個語音同時清晰可聽 為什么需要多路混音播放?技術原理概述第一步:配置ALSA dmix混音插件為什么需要dmix?具體配置步驟第二步:生成TTS語音文件為什么需要格式轉換?Python生成腳本第三步:實現多路同時播放播放器設計原理Python實現代碼多路同時播…

Spring AI 1.0 GA 深度解析:構建企業級AI應用的全棧實踐指南

目錄 Spring AI 1.0 核心架構解析統一接口與多模型支持檢索增強生成(RAG)全流程實戰對話記憶與工具調用進階模型評估與可觀測性體系企業級應用案例與最佳實踐未來演進與技術展望1. Spring AI 1.0 核心架構解析 1.1 技術架構演進 #mermaid-svg-ymTZMAaxOwd4OAMu {font-family…