R语言基础 | 安徽某高校《统计建模与R软件》期末复习

第一节 数字、字符与向量

1.1 向量的赋值

c<-(1,2,3,4,5)

1.2 向量的运算

对于向量,我们可以直接对其作加(+),减(-),乘(*),除(/),乘方(^{}),整数除法(%/%),求余(%%)运算,其含义就是对向量的每一个元素进行运算。

1.3 向量运算函数

    min(x) # 返回最小值
    max(x) # 返回最大值
    range(x) # 返回最小值和最大值
    which.min(x) # 返回最小值的下标
    which.max(x) # 返回最大值的下标
    sum(x) # 元素求和
    prod(x) # 元素连乘
    length(x) # 向量长度
    median(x) # 中位数
    mean(x) # 均值
    var(x) # 方差
    sd(x) # 标准差
    sort(x) # 排序
    order(x) # 返回排序后的索引

1.4 逻辑向量

逻辑向量是一种用于存储逻辑(布尔)值的数据结构。逻辑向量可以包含两种可能的值:TRUE(真)和FALSE(假),用来表示逻辑条件的结果或逻辑操作的输出。

    all(c(1,2,3)>2) # 返回FALSE
    all(c(1,2,3)>2) # 返回TRUE
x <- c(1, 2, 3, 4, 5)
logical_vector <- ifelse(x > 3, TRUE, FALSE)
# logical_vector 包含 FALSE FALSE FALSE TRUE TRUE

1.5 生成有规律的序列

    # 生成等差数列
    a:b
    # 等间隔函数
    s1<-seq(-5,5,by=2) # 生成间隔为2,从-5到5的等间隔序列
    # 重复函数
    rep()
    s1<-rep(x,times=3)

1.6 缺失数值的操作

    z<-c(1:3,NA) # 用NA表示缺失的数据
    is.na(z) # 逐个检测是否为缺失数据,TRUE则表示缺失
    z[is.na(z)]<-0 # 将缺失数据改成0
    is.nan() # 检测数据是否为NaN
    is.finite() # 检测数据是否有限(非NaN非无穷大)  

补充:NA(Not Available)和NaN(Not a Number)是两个不同的概念,前者表示缺失值或不可用值,后者表示非有效数值,比如\frac{0}{0}\sqrt{-2}就是NaN。

1.7 字符型向量

字符型向量是R语言中的一种数据结构,用于存储文本数据或字符串。字符型向量可以包含任何文本字符,如字母、数字、符号等,并且可以包含不同长度的字符串。

    k<-c("jerry","lin")

paste()函数用于将多个元素(字符向量、数值、逻辑值等)组合成一个字符串,可以指定分隔符来连接这些元素。例如:

# 简单的连接字符型向量
fruits <- c("apple", "banana", "cherry")
result <- paste(fruits, collapse = ", ")
# result 包含 "apple, banana, cherry"

# 使用不同的分隔符
numbers <- c(1, 2, 3, 4)
result <- paste(numbers, sep = "-")
# result 包含 "1-2-3-4"
result <- paste("x",numbers,sep = "-")
# result 包含 "x-1" "x-2" "x-3" "x-4"

# 连接多个对象
name <- "John"
age <- 30
result <- paste("My name is", name, "and I am", age, "years old.")
# result 包含 "My name is John and I am 30 years old."

1.8 复数向量

# 创建一个复数
z <- complex(real = 3, imaginary = 4)

# 计算实部
real_part <- Re(z)
cat("Real part:", real_part, "\n")

# 计算虚部
imaginary_part <- Im(z)
cat("Imaginary part:", imaginary_part, "\n")

# 计算模
modulus <- Mod(z)
cat("Modulus:", modulus, "\n")

# 计算幅角(以弧度为单位)
argument <- Arg(z)
cat("Argument (in radians):", argument, "\n")

1.9 下标

1.9.1 下标的顺序访问

    x<-(1,2,3)
    x[2] # 访问向量x的第二个元素

1.9.2 下标的逻辑访问

    x<-c(1,2,3)
    x[x<3] # 访问向量中所有小于3的元素

1.9.3 下标的名称访问

# 创建一个有命名元素的向量
fruit_prices <- c(apple = 1.2, banana = 0.8, cherry = 2.5, orange = 1.0)

# 访问向量的元素通过名字
apple_price <- fruit_prices["apple"]
# 也可以使用$符号来访问
banana_price <- fruit_prices$banana

第二节 对象

2.1 对象的分类

可以将对象分为两类:单纯对象(atomic vectors)和复合对象(lists)。

  • 单纯对象是R中的基本数据结构,它们包含具有相同数据类型的元素。
  • R中常见的单纯对象类型包括:
    • 向量(Vectors):包括数值向量、字符向量、逻辑向量、复数向量等,每个向量的元素都是相同的数据类型。
    • 因子(Factors):用于表示分类数据,每个因子的元素属于一个有限的类别。
    • 整数向量(Integer Vectors):包括整数类型的向量。

复合对象(Lists):

  • 复合对象是R中的数据结构,它们可以包含不同数据类型的元素,因此被称为“复合”对象。
  • 复合对象通常用于组织和存储各种数据类型的数据,可以包含向量、数据框、单纯对象、其他复合对象等。
  • 列表(List)是R中最常见的复合对象类型,它允许你创建包含不同类型的元素的数据结构。

2.2 对象的基本属性

对象具有两个基本属性:类型(Mode)属性和长度(Length)属性。这些属性对于操作和分析数据非常重要。可以使用不同的函数来检测对象的类型和长度,以便更好地理解和操作数据。

对象类型(Mode)属性:

  • 你可以使用 mode() 函数来获取对象的类型属性。
  • 也可以使用 is.*() 函数系列来检测对象的类型,这些函数返回逻辑值(TRUE或FALSE),用于判断对象是否属于特定类型。
  • 例如,is.numeric() 检测对象是否为数值类型,is.character() 检测对象是否为字符类型,is.data.frame() 检测对象是否为数据框等。

对象长度(Length)属性:

  • 你可以使用 length() 函数来获取对象的长度属性,它告诉你对象中包含的元素数量。
  • 对于复合对象,比如列表或数据框,length() 返回的是元素的数量,而不是元素的总数。

2.3 强制类型转换

你可以使用 as. 开头的一系列函数来进行类型转换,以将一个对象强制转换为另一种数据类型。这些函数通常用于将对象从一种数据类型转换为另一种,以满足特定的计算或分析需求。例如:

x <- "123"
x_numeric <- as.numeric(x)

y <- 5.7
y_integer <- as.integer(y)

z <- 123
z_character <- as.character(z)

a <- 0
a_logical <- as.logical(a)

b <- c("red", "green", "blue", "red")
b_factor <- as.factor(b)

2.4 attributes和attr函数

你可以使用 attributes(object) 函数来获取对象 object 的各个特殊属性组成的列表,但这个列表通常不包括固有属性 modelength。这个函数可以用于检查对象的附加信息和属性。

# 创建一个向量并为其添加特殊属性
x <- c(1, 2, 3, 4, 5)
attr(x, "description") <- "This is a numeric vector"

# 获取对象的特殊属性
attr_list <- attributes(x)
print(attr_list)

在这个示例中,我们首先创建了一个名为 x 的数值向量,并使用 attr() 函数为它添加了一个特殊属性 "description"。然后,我们使用 attributes() 函数来获取 x 的特殊属性列表。

2.5 自动伸长和强制压缩

在R语言中,允许对超出对象长度的下标进行赋值,这个特性通常被称为"自动伸长"。当你使用超出对象长度的下标进行赋值时,R会自动扩展对象的长度,并将未赋值的元素初始化为缺失值(NA)。这可以方便地向对象添加新元素或修改现有元素。我们也可以通过直接修改length值对对象进行压缩。例如:

# 创建一个向量
x <- c(1, 2, 3)

# 使用超出对象长度的下标赋值(自动伸长)
x[5] <- 6
# 现在向量x变为 1 2 3 NA 6

# 缩短对象长度
x <- x[1:3]
# 向量x变为 1 2 3

# 直接给长度赋值
length(x) <- 2
# 向量x变为 1 2

2.6 class属性

在R语言中,可以使用特殊的class属性来支持面向对象的编程风格,这允许你定义自己的对象类,并为这些类定义不同的方法。通过给对象设置不同的class属性,你可以使通用函数(如print()plot()等)根据对象的类别执行不同的操作,实现多态性。

第三节 因子

3.1 变量的类别

3.1.1 区间变量

区间变量是一种连续的数值变量,可以进行各种数学运算,如求和、平均值、差值等。
它们可以用数值来表示,并且数值之间具有加减乘除的意义。
区间变量通常表示一定范围内的度量,如温度、年龄等。

3.1.2 名义变量

名义变量是一种离散的变量,可以用数值或字符型值来表示,但具体数值没有数学运算的意义。
名义变量主要用于分类或计数,用来表示不同的类别或类别之间的差异。
例子包括性别、省份、职业等。

3.1.3 有序变量

有序变量是一种离散的变量,可以用数值或字符型值来表示,但具有顺序或排序的含义。
虽然有序变量的数值有意义,但仅限于表示它们的相对顺序,而不支持加减乘除等数学运算。
有序变量通常用于表示等级、名次、满意度等具有明显排序关系的情况,如班级、名次等。

3.2 factor、levels、table函数

    sex<-c("M","F","M","M","F")
    sexf<-factor(sex) # 创建因子
    sexl<-levels(sexf) # 得到因子的水平,即不同的类别标签
    sext<-table(sexf) # 统计频数

3.3 apply和tapply函数

3.3.1 apply函数

  • apply 函数用于在矩阵或数组的行或列上执行函数操作。它可以对数据的行或列进行操作,而不仅仅是单一的向量。
  • apply 函数的语法为:apply(X, MARGIN, FUN),其中:
    • X 是要操作的矩阵或数组。
    • MARGIN 指定了要操作的维度,通常为1表示行,2表示列,或者其他维度的索引。
    • FUN 是要应用的函数,通常是自定义的或内置的R函数。

示例:

# 创建一个矩阵
mat <- matrix(1:12, nrow = 3, ncol = 4)

# 使用apply函数计算每列的和
col_sums <- apply(mat, 2, sum)

3.3.2 tapply函数

  • tapply 函数用于按照一个或多个因子变量对数据进行拆分(分组),然后在每个分组上应用一个函数,并将结果整合成一个列表或向量。
  • tapply 函数的语法为:tapply(X, INDEX, FUN),其中:
    • X 是要操作的数据向量。
    • INDEX 是一个或多个因子变量,用于定义数据的分组。
    • FUN 是要应用于每个分组的函数。

示例:

# 创建一个数据框
df <- data.frame(
  gender = c("M", "F", "M", "F", "M"),
  score = c(80, 85, 78, 92, 88)
)

# 使用tapply函数按性别分组计算平均分
avg_score_by_gender <- tapply(df$score, df$gender, mean)

3.4 gl函数

gl()函数是用于创建因子的函数,特别适用于生成重复的因子水平:

gl(n, k, labels = NULL, length = n * k, ordered = FALSE)
  • n:一个正整数,表示每个水平要重复的次数。
  • k:一个正整数,表示总的水平数。
  • labels:一个字符向量,包含了水平的标签。如果未指定,将使用默认标签。
  • length:生成的因子向量的长度。
  • ordered:一个逻辑值,表示生成的因子是否应该是有序的,默认为FALSE。

第四节 多维数组和矩阵

4.1 数组和矩阵的生成

4.1.1 向量直接生成

向量只有定义了维数向量(dim属性)后才能被看作是数组,⽐如:

    z<-1:12
    dim(z)<-c(3,4)

注意:矩阵的元素是按列存放的。

4.1.2 array函数

array() 函数是R语言中用于创建多维数组的函数。多维数组是一种数据结构,可以存储多个维度的数据。array() 函数允许你指定数据、维度和维度名称,以便创建具有特定结构的数组。

data <- c(1, 2, 3, 4, 5, 6)
# 创建一个二维数组,并指定维度和维度名称
arr <- array(data, dim = c(2, 3), dimnames = list(c("Row1", "Row2"), c("Col1", "Col2", "Col3")))
  • data:要存储在数组中的数据,通常是一个向量或矩阵。
  • dim:一个整数向量,指定了数组的维度,它定义了数组的形状和结构。
  • dimnames:一个包含行和列名称的列表,用于指定数组的维度名称。

4.1.3 matrix函数

    matrix(data, nrow = , ncol = , byrow = FALSE, dimnames = NULL)
  • data:用于填充矩阵的数据,可以是向量或其他可转换为矩阵的数据结构。
  • nrow:矩阵的行数。
  • ncol:矩阵的列数。
  • byrow:一个逻辑值,用于指定数据填充矩阵的方式。如果为TRUE,则按行填充;如果为FALSE(默认值),则按列填充。
  • dimnames:一个包含行名和列名的列表,用于指定矩阵的行名和列名。

4.2 数组的下标

数组与向量⼀样,可以对数组中的某些元素进⾏访问,或进⾏运算:

# 选择下标为(1, 2, 1)的元素
a[1, 2, 1]

# 选择下标为(1, 2, 1)和(1, 3, 1)的元素
a[1, 2:3, 1]

# 选择所有第一维下标为1的元素
a[1,,]

# 选择整个数组(返回整个数组的副本)
a[]

# 对数组的数据向量取子集,选择从第三个元素到第十个元素
a[3:10]

4.3 矩阵的运算

# 转置运算
t(A)

# 求方阵的行列式
det(A)

# 计算向量x和y的内积
x %*% y

# 计算向量x和y的内积(另一种方式)
crossprod(x, y)

# 计算向量x和y的外积
x %o% y

# 计算向量x和y的外积(等价于x %*% t(y))
tcrossprod(x, y)

# 获取矩阵A的对角线元素(若A为向量,则创建对角阵)
diag(A)

# 解线性方程组Ax=b
solve(A, b)

# 求矩阵A的特征值和特征向量
eigen(A)

# 求矩阵A的秩
rank(A)

# 对矩阵A进行奇异值分解
svd(A)

# 对矩阵A进行QR分解
qr(A)

第五节 列表与数据框

5.1 列表

列表是一种复合数据结构,可以包含多种不同类型的数据,包括向量、矩阵、数据框、函数等。列表的主要特点如下:

  1. 多类型元素:列表可以包含不同数据类型的元素,因此它是一种松散结构,允许在同一个列表中存储不同类型的数据。

  2. 使用列表索引:列表的元素可以使用索引来访问,每个元素可以有一个名称(标签)或使用数字索引进行访问。

  3. 创建列表:可以使用 list() 函数来创建列表。例如,通过以下方式创建一个包含不同类型元素的列表:

    my_list <- list(a = 1, b = "text", c = c(1, 2, 3))
    

         这将创建一个名为 my_list 的列表,其中包含了整数、字符和数值向量等不同类型的元素。

  1. 访问列表元素:可以使用 $ 运算符或 [[ ]] 来访问列表的元素。例如,要访问列表中的元素可以使用以下方式:使用 $ 运算符:my_list$amy_list$b;使用 [[ ]] 运算符:my_list[["c"]]

5.2 数据框

数据框是一种二维数据结构,类似于表格或电子表格,它是R中最常用的数据结构之一。数据框的主要特点如下:

  1. 二维结构:数据框包含行和列,可以看作是一个二维表格,其中每一列可以包含不同数据类型的数据,但每一列的数据类型必须一致。

  2. 列名和行名:数据框的列(变量)有名称,可以通过列名来访问数据。同时,数据框的行可以有行名,也可以通过行名来访问数据。

  3. 创建数据框:可以使用 data.frame() 函数来创建数据框。例如,通过以下方式创建一个包含不同类型数据的数据框:

    my_df <- data.frame(ID = 1:3, Name = c("Alice", "Bob", "Charlie"))
    

    这将创建一个名为 my_df 的数据框,其中包含了整数和字符数据类型的列("ID" 和 "Name")。

  4. 访问数据框元素:可以使用 $ 运算符或 [ ] 来访问数据框的列或元素。例如,要访问数据框中的列,可以使用以下方式:使用 $ 运算符:my_df$Name;使用 [ ] 运算符:my_df[1, 2]

(个人总结,如有谬误或需要改进之处欢迎联系作者)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/267348.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Python实现发送Email电子邮件【第19篇—python发邮件】

文章目录 &#x1f47d;使用Python实现发送Email电子邮件&#x1f3b6;实现原理&#x1f3c3;Python实现发送Email电子邮件-基础版&#x1f46b;实现源码&#x1f646;源码解析 &#x1f487;Python实现发送Email电子邮件-完善版&#x1f46b;实现源码&#x1f646;源码解析&am…

随机无限采集JK妹妹高清壁纸下载HTML网页源码

源码介绍 美图网站千千万&#xff0c;美图自己说了算&#xff01;本源码由宋佳乐博客 开发&#xff0c;首页图片做了浏览器窗口自适应&#xff0c;最大化占满PC浏览器和移动浏览器的窗口&#xff0c;并且防止出现滚动条。 功能介绍 首页图片设置了4个点击功能区&#xff0c;…

【数据结构入门精讲 | 第十一篇】一文讲清树

在上一篇中我们进行了排序算法的专项练习&#xff0c;现在让我们开始树的知识点讲解。 目录 树二叉搜索树二叉排序树哈夫曼树折半查找判定树kruskal算法、prim算法、最小生成树完全二叉树 树 树是一种非线性的数据结构&#xff0c;也是一种表示一对多关系的数据结构&#xff0…

Flink CDC 1.0至3.0回忆录

Flink CDC 1.0至3.0回忆录 一、引言二、CDC概述三、Flink CDC 1.0&#xff1a;扬帆起航3.1 架构设计3.2 版本痛点 四、Flink CDC 2.0&#xff1a;成长突破4.1 DBlog 无锁算法4.2 FLIP-27 架构实现4.3 整体流程 五、Flink CDC 3.0&#xff1a;应运而生六、Flink CDC 的影响和价值…

Python 数据分析 Matplotlib篇 plot设置线条样式(第2讲)

Python 数据分析 Matplotlib篇 plot设置线条样式(第2讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

算法基础之完全背包问题

完全背包问题 核心思想&#xff1a;集合表示&#xff1a; f[i][j]表示前i种物品 总容量不超过j的最大价值 求f[i][j]时 分为选0、1、2……n个第i种物品 n种情况 每种情况为 f[i][j-kv] (取k个第i种物品) 即f[i][j] max(f[i-1][j] , f[i-1][j-v]w,f[i-1][j-2v]2w….f[i-1][j-k…

【自用】Ubuntu20.4从Vivado到ddr200t运行HelloWorld

【自用】Ubuntu20.4新系统从输入法到ddr200t运行HelloWorld 一、编辑bashrc二、Vivado2022.2安装三、编译蜂鸟E203自测样例1. 环境准备2. 下载e203_hbirdv2工程文件3. 尝试编译自测案例1. 安装RISC-V GNU工具链2. 编译测试样例 4. 用vivado为FPGA生成mcs文件1.准备RTL2.生成bit…

Centos 7.9安装Oracle19c步骤亲测可用有视频

视频介绍了在虚拟机安装centos 7.9并安装数据库软件的全过程 视频链接&#xff1a;https://www.zhihu.com/zvideo/1721267375351996416 下面的文字描述是安装数据库的部分介绍 一.安装环境准备 链接&#xff1a;https://pan.baidu.com/s/1Ogn47UZQ2w7iiHAiVdWDSQ 提取码&am…

贝叶斯球快速检验条件独立

贝叶斯球 定义几个术语&#xff0c;描述贝叶斯球在一个结点上的动作&#xff1a; 通过&#xff08;pass through&#xff09;&#xff1a;从当前结点的父结点方向过来的球&#xff0c;可以访问当前结点的任意子结点&#xff08;父->子&#xff09;。从当前节点的子结点方向…

基于电商场景的高并发RocketMQ实战-NameServer内核原理剖析、Broker 主从架构与集群模式原理分析

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 【11来了】文章导读地址&#xff1a;点击查看文章导读&#xff01; &#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f3…

Prometheus介绍和安装

Prometheus介绍和安装 1. Prometheus介绍 Prometheus&#xff08;普罗米修斯&#xff09;是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目&#xff0c;拥有非常活跃的开发人员和用户社区。为强调开源及独立维护&#xff0c;Prometheus于2016年加入云原生云…

指标体系构建-03-交易型的数据指标体系

参考&#xff1a; 本文参考 1.接地气的陈老师的数据指标系列 2.科普 | 零售行业的数据指标体系及其含义、应用阶段 3.”人货场”模型搞懂没&#xff1f;数据分析大部分场景都能用&#xff01; 4.一分钟读懂广告投放各计费CPM、CPC等&#xff08;公式推导干货&#xff09; 5.AA…

mysql 数据编译安装以及参数说明 安装包下载

目录 MySQL 官网地址官网下载源码包安装步骤修改密码 MySQL 官网地址 https://dev.mysql.com/doc/ 官网下载源码包 安装步骤 # 所需要的依赖及安装mysql的包" [rootmysql_source ~]# yum -y install ncurses ncurses-devel openssl-devel bison libgcrypt gcc gcc-c ma…

前缀和+单调双队列+贪心:LeetCode2945:找到最大非递减数组的长度

本文涉及知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 单调双队列 贪心 题目 给你一个下标从 0 开始的整数数组 nums 。 你可以执行任意次操作。每次操作中&#xff0c;你需要选择一个 子数组 &#xff0c;并将这个子数组用它所…

AcWing 1238. 日志统计(双指针,滑动窗口)

题目&#xff1a; 1238. 日志统计 - AcWing题库 数据范围 输入样例&#xff1a; 7 10 2 0 1 0 10 10 10 10 1 9 1 100 3 100 3输出样例&#xff1a; 1 3 思路&#xff1a;双指针 代码&#xff1a; #include<iostream> #include<cstdio> #include<cmath>…

如何从 Android 手机免费恢复已删除的通话记录/历史记录?

有一个有合作意向的人给我打电话&#xff0c;但我没有接听。更糟糕的是&#xff0c;我错误地将其删除&#xff0c;认为这是一个骚扰电话。那么有没有办法从 Android 手机恢复已删除的通话记录呢&#xff1f;” 塞缪尔问道。如何在 Android 上恢复已删除的通话记录&#xff1f;如…

LeetCode刷题--- 组合总和

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 http://t.csdnimg.cn/6AbpV 数据结构与算法 http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述递归递归、搜…

uniapp怎么动态渲染导航栏的title?

直接在接口请求里面写入以下&#xff1a; 自己要什么参数就写什么参数 本人仅供参考&#xff1a; this.name res.data.data[i].name; console.log(名字, res.data.data[i].name); uni.setNavigationBarTitle({title: this.name}) 效果&#xff1a;

[Linux] MySQL数据库之索引

一、索引的相关知识 1.1 索引的简介 索引是一个排序列表&#xff0c;包含索引值和包含该值的数据行的物理地址&#xff08;类似于 c 语言链表&#xff0c;通过指针指向数据记录的内存地址&#xff09;。 使用索引后可以不用扫描全表来定位某行的数据&#xff0c;而是先通过索…

Redis-运维

转自 极客时间 Redis 亚风 原文视频&#xff1a;https://u.geekbang.org/lesson/535?article681062 Redis 同步 Redis主从数据同步,主从第⼀次同步是全量同步 replicaof 主机 端口 #当前这个机器做Master的备份master如何判断slave是不是第⼀次来同步数据&#xff1a; Repl…