R语言程序设计(零基础速通R语言语法和常见函数的使用)

目录

1.Rstudio中的一些快捷键

2.R对象的属性

3.R语言中常用的运算符​编辑

4.R的数据结构

向量

如何建立向量?

如何从向量里面提取元素?

矩阵

如何建立矩阵?

如何从矩阵里面提取元素?

数据框

如何建立数据框?

如何从数据框里提取元素?

列表

如何创建列表?

如何从列表里提取元素?

因子(了解)

5.R程序设计

1.条件语句

循环语句

1. for 循环

2. while 循环

3. repeat 循环

利用向量化简化循环或控制结构

6.文件操作

setwd()

dir()


1.Rstudio中的一些快捷键

ctrl+回车:执行某一块代码

ctrl+z:撤销本次操作
ctrl+shift+z:前进一次(比如撤销多了,可以使用这个快捷键)

ctrl+l:清楚左下框的内容

在R语言中,通常不需要像C语言一样在每条语句的结尾添加分号来表示语句结束。R语言是一种脚本语言,它使用换行符来分隔语句,因此分号通常是可选的,除非你想在同一行上写多个语句。在R中,分号用于分隔多个语句,但它不是必需的,尤其是在每行只有一个语句时。因此,一般情况下,你不需要在每个语句的末尾加上分号。

2.R对象的属性

R语言能够操作的对象均具有类型和模式两种属性

类型(class):是函数还是数据?

模式(mode):数据结构里面每个元素的类型

什么意思呢,比如我们C语言中有数组,数组中有元素,元素有类型,同样的R语言中也有向量,向量里面有元素,元素有类型,元素的类型就是就被称为模式。当然这里只是以向量来举个例子,向量只是R语言中的其中一种数据结构。根据数据结构中元素的种类可以把模式分为数值型,字符型,复数型,逻辑型,函数,表达式等。其中数值型又包括整形,单精度实型,双精度实型,逻辑型

字符型的变量在赋值的时候要用双引号引起来,这与C语言中的字符赋值是不一样的,因为在C语言中字符用单引号引起来

3.R语言中常用的运算符

补充:%/%是整除的意思

R语言中对某个变量进行赋值可以用=,也可以用<-

我们可以看到上面的逻辑运算那一列中分别有两个逻辑与和两个逻辑或,那么一个x&y和x&&y有什么区别?假如有x和y两个向量,它们均包含五个元素,那么x&y会把x和y中的对应位置的每个元素都进行与操作,而x&&y只会对x和y这两个向量的第一个元素进行与操作。

一个语句写完换到下一行之后有一个>,一个语句没有写完也可以换到下一行,这时候会有一个+

求助符可以不用,因为我们可以在右下角的help中搜索需要的函数

4.R的数据结构

R语言中常用的数据结构包括:向量、因子、数组、矩阵、数据框、时间序列、列表

其中列表和数据框允许多种模式。其余的只允许一个模式

对于一般的缺失值,R并不会任由这个位置空着,而是会填充上一个NA的特数量

对于运算产生的缺失值,比如对负数求对数,其他语言会报错,而R则会产生一个NaN的特殊量

针对上面两种缺失值,R有检验的手段,也就是函数is.na()和is.nan(),因为在处理数据的时候会产生缺失值,我们希望把缺失值删掉或者填充为平均值,就要用到这两个函数,搭配循环语句等手段

正无穷大:lnf

负无穷大:-lnf

R同样提供了对正负无穷大进行检验的手段,就是isfinite()和isinfinite(),分别用于检测正无穷大和负无穷大

向量

R语言中向量的下标是从1开始的,而C语言等高级语言中下标是从0开始的

对标的是C语言中的数组,里面存放着一系列类型相同的元素

如何建立向量?

1.使用seq()函数

若向量具有较为简单的数学规律,可以使用seq函数来生成一个向量,实际上seq常用于生成一个简单的等差数列

seq(from, to, by = (to - from)/(length.out - 1), length.out = NULL)

其中:

  • from: 序列的起始值。
  • to: 序列的结束值。
  • by: 序列值之间的步长。默认情况下,步长被设置为 (to - from) / (length.out - 1)。
  • length.out: 期望的输出序列的长度。如果指定了 length.out,则 by 将被忽略。

seq()函数的功能是生成从起始值到结束值的等间隔序列。它可以用来生成从一个值到另一个值的数字序列。例如:

虽然这个函数有四个参数,但是在使用的时候通常不需要输入四个参数,只需要三个,比如seq(1, 10, by = 2)就没有输入length.out,这时候length.out就被默认为NULL。再比如seq(1, 10, length.out = 5),by就默认为(to - from)/(length.out - 1),输出: 1 3.25 5.5 7.75 10

2.使用c()函数生成向量:

常用于创建没有规律的向量,这也是后期用的最多的一种方式

vector

比如用c()创建一个字符型的向量

x

3.使用:运算符生成向量:

冒号运算符通常用来生成步长为1的等差数列

比如x

4.使用rep()函数生成向量:

常用于创建具有重复规律的向量,还可以与其他的操作符结合使用,比如

x=rep(1:3,3),执行之后x是123123123

逻辑型向量

逻辑型向量里面的元素只能包含TRUE FALSE 或者缺失值NA

在运算的时候TRUE会被当做1,FALSE会被当做0

什么时候会用到逻辑向量?

1.对向量里面的元素进行判断的时候,比如要统计向量中有多少个大于零的元素,有多少个小于零的元素

2.对图中的点进行赋值的时候,比如满足某条件的值赋成红色

向量运算中的循环法则

在第一个例子中两个不等长的向量进行相加,一个向量是1 2,一个向量是1 2 3 4,向量再进行加减的时候是对应位置的元素相加减,此时的第一个向量会被补齐到四个元素,补齐遵循循环法则,也就是第一个向量会被补齐为1212,然后与第二个向量1234对应的位置相加,最终得到的向量是2446,实际上Rstudio非常智能,他在显示的时候自动在两个相邻数之间加了一个空格,使我们能够更清晰的看到向量的元素是2 4 4 6

第二个例子中第一个向量是1 2 3 4,第二个向量是1 2 3 4 5 6 7,在相加的时候遵循循环法则,补齐到7个元素,变成1 2 3 4 1 2 3,与第二个向量相加之后的到结果为2 4 6 8 6 8 10,可以看到结果已经显示在了屏幕上面。但是同时下面报了一个错误,这是因为这两个向量的长度不成倍数关系。

如何从向量里面提取元素?

提取元素使用的是[]

假如有一个向量x

正的下标:提取向量中对应的元素,如执行x[1]之后x变成了42,执行x[c(1,4)]也就是提取第一个和第四个元素,x变成了42 9,要提取多个元素只能在[]里面使用c(),不能直接写x[1,4],这种写法会报错

负的下标:去掉向量中对应的元素,如执行x[-2]之后x变成了42 64 9

逻辑运算:提取向量中满足条件的元素,如执行x[x>10]之后x变成了42 64,同时我们可以用sum(x>10)来统计原来的x向量中大于10的个数,因为sum函数是把TRUE 和 FALSE加起来

矩阵

这里的矩阵就是线性代数里面学过的矩阵,有行和列,矩阵的元素也必须是同一种类型也即一个矩阵只能有一种模式

如何建立矩阵?

矩阵的建立使用的是函数matrix

matrix的函数原型和参数意义如下

matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)

data:为一个向量,其元素用于构建矩阵

nrow:矩阵的行数

ncol:矩阵的列数

byrow:是否按行填充

dimnames:矩阵行列的名字

如图

这样就创建了一个四行两列的矩阵a

实际上也可以不写nrow和ncol,直接写matrix(x,4,2),也可以创建a矩阵

可以看到a矩阵的行和列显示的时候都有一个逗号,R语言规定逗号前面的是行,后面的是列

我们在创建矩阵的时候省略了matrix函数原型中后面的2个参数,同时观察到a矩阵是按照列来进行填充的,这是因为第三个参数byrow我们不写,默认是FLASE,顾名思义也知道不是按行来排列的,如果我们想要按行来用向量x填充矩阵a,我们就要把第三个参数byrow写成TRUE或者T,如图

这样就是按行排列的了

可以使用下面的函数查看

发现a有四行两列,模式是numeric,类型是matrix,长度是8

如何从矩阵里面提取元素?

同向量的下表类似,从矩阵里面提取元素也是用的[]操作符,这个操作非常重要,因为我们在处理数据的时候要经常需要提取某一行或者某一列的数据

对于一个矩阵a来讲

a[,j]表示取出矩阵第j列的元素

a[i,]表示取出矩阵第i行的元素

a[i,j]表示取出第i行第j列的元素

a[-i,]表示取出除第i行以外的所有元素

a[,-j]表示取出除第j列以外的所有元素

例如

我们也可以在提取的时候加上一个drop=F

这样提取出来的第一行不仅仅是三个元素,而是由这三个元素组成的一个矩阵

这是因为R的缺省规则是返回一个位数尽可能低的对象,这可以改变drop的值来改变

再来看一个比较复杂的代码

从外面来看是要提取a的某一行,再看里面,又是提取了a的第二列,也就是3和4,然后找出这两个数里面比3大的数,也就是四,因此最终里面就是4,但是a只有两行,这时候R会提取有大于三的数也就是4的这一行,也就是第二行。

数据框

数据框实际上就是一种推广了的矩阵,数据框的每一列必须是统一模式,且长度要相等,也就是说不同列可以是不同模式的数据,比如第一列可以保存字符,第二列可以保存数值

如何建立数据框?

1.通常使用函数data.frame()来建立数据框

可以使用上面的代码创建一个如图所示的数据框

这里的INDEX和VALUE并不是函数原型的参数,而是我们随便起的,表示列名,比如我还可以写成A和B,就创建了一个这样的数据框

通常情况下不需要给行号起名,这样默认是从1开始顺序递增,当然如果想,也可以对行进行命名,比如

这样就行号就从3开始递增了

row.names必须是一个可变的值,像row.names=3这样的写法会直接报错

2.把文件导入R来建立数据框

read.table 读取表格文件

read.csv() 逗号分隔的文件

read.delim() tab键分隔的文件

如何从数据框里提取元素?

数据框子集的提取与矩阵基本相同,主要的差别在于在提取数据框的某一列的时候可以使用变量的名称

格式:foo[row,column]

其中foo是数据框的名称,row是需要提取的行号,column是需要提取的列号

如图创建了一个这样的数据框

df[df[,1]>50,]这个语句首先能看到他的逗号在前面,表示提取某一行,提取的是哪一行,需要看df[,1]的结果。df[,1]表示提取第一列,然后后面还有>50,因此提取的行就是第一列中包含大于50的元素的那行。也就是第三行。

要提取数据框的某一列,还可以使用$符号直接提取

也可以使用$符号增加一列

列表

在分析复杂数据的时候,仅有向量和数据框是不够的,有时候需要生成包括不同类型的对象,R的列表就是包含任何类型的对象,初学者可能会对列表和数据框产生混淆

列表与数据框最直观的区别就是列表是一维的,而数据框是二维的。列表中的元素类型是任意的,而数据框中每一列的元素必须是同类型的,不同列的元素类型可以是不同类型的

如何创建列表?

通常使用list函数来创建列表,函数原型如下

list(..., recursive = FALSE)

其中...是任意数量任意类型的R对象,中间用逗号分隔,而且每个对象都要有自己的名字,比如

列表a里面包含了一个向量x,一个矩阵y,和一个数值z

如何从列表里提取元素?

因为列表里面的元素都是按照顺序排列的,因此也可以通过下标来确定唯一的元素,当然也可以这样提取了,比如

这样就提取了列表a中的第一个元素

使用$符号提取

又由于列表里面每个元素都有自己的名称,因此可以直接使用名称来唯一确定某个元素,当然也就可以提取,比如

这样就提取了名称为x的元素

也可以使用两个[]来提取元素

仔细观察发现这三种提取方式虽然目的都是提取列表的第一个元素,但是提取的结果还是有细微的差别,第一种方式运行结果有个$x,但是后两种没有。这是因为一个[]表示提取的是列表的子列表,也就是说第一个运行结果是一个子列表,你可能有疑问,第一个元素x不是一个向量吗?怎么成列表了?虽然x是一个向量,但是他是列表a的子元素或者说子集,列表的子集被称作子列表,很合理吧。

而后两种提取方式则是提取了x这个向量中元素的值,返回的是一个向量

知道了这一点之后,来看这样的代码

因为a[[1]]表示提取了第一个元素并且是个向量,因此我们可以再次提取这个向量的某个元素,这里后面的[2]就表示提取a列表第一个元素也就是x向量的第二个元素,x向量是1 2 3 4,他的第二个元素就是2

再比如

a$y表示提取了列表a中名称为y的元素,y是一个矩阵,再[2,]表示提取这个矩阵第二行,最终结果就是2 4

因子(了解)

在R语言中,因子(Factor)是一种用来表示分类变量的数据结构。它将离散的数据分为不同的水平(levels),并将数据存储为整数值,而不是直接存储为字符或字符串。比如

运行结果为

因子的应用比较少,就不过多解释了

5.R程序设计

1.条件语句

形式1:if().... else...

形式2:ifelse(条件,yes,no)

来看一个例子

运行结果是一个散点图

这段代码首先生成了一个长度为10的随机数向量x,这些随机数服从均值为10,标准差为2的正态分布。具体来说,rnorm(10, mean = 10, sd = 2)这部分生成了这个随机数向量。

然后,使用plot()函数对这个向量进行绘图。在plot()函数中,x是要绘制的数据,col参数用于指定点的颜色。在这里,使用了一个条件语句ifelse(x > 1,"red","black"),如果x的值大于1,则点的颜色为红色,否则为黑色。

另外,font.lab=2参数用于设置坐标轴标签的字体样式。

最后,ylab和xlab分别指定了y轴和x轴的标签。

综合起来,这段代码的作用是生成一个正态分布随机数向量,并以散点图的形式将这些数据绘制出来,点的颜色根据数据值是否大于1来区分。

循环语句

在R语言中,循环语句主要有三种形式:for、while 和 repeat。下面分别介绍它们的用法:

1. for 循环

for 循环通常用于遍历一个序列(如向量、列表等)中的元素,执行指定的操作。其基本语法为:

for (variable in sequence) { # 待执行的代码块 }

  • variable 是循环中的变量,它在每次迭代时会取序列 sequence 中的一个值。
  • sequence 是要迭代的序列,可以是向量、列表等。
  • 在每次迭代时,variable 取 sequence 中的一个元素,然后执行代码块中的操作。

例如,遍历一个向量中的元素并打印它们的值:

2. while 循环

while 循环会在指定条件为真时重复执行代码块,直到条件为假为止。其基本语法为:

while (condition) { # 待执行的代码块 }

  • condition 是一个逻辑表达式,当其为 TRUE 时,循环会继续执行;当其为 FALSE 时,循环结束。
  • 在每次迭代时,都会检查 condition 的值,如果为 TRUE,则执行代码块。

例如,计算一个数的阶乘直到结果大于100:

3. repeat 循环

repeat 循环会无限地执行代码块,直到遇到 break 语句为止。其基本语法为:

repeat { # 待执行的代码块 if (condition) { break # 在满足条件时终止循环 } }

  • repeat 循环会一直执行其中的代码块,直到遇到 break 语句。
  • 通常在循环内部使用 if 语句和条件来控制何时退出循环。

总结:

  • 当你需要对一个序列中的每个元素执行相同的操作时,选择 for 循环。
  • 当你需要在满足某个条件时重复执行某段代码时,选择 while 循环。
  • 当你需要在满足某个条件前无限循环执行某段代码时,选择 repeat 循环。

利用向量化简化循环或控制结构

在R语言中,向量化是一种利用向量操作来简化循环和控制结构的技术。通过向量化,可以避免显式地使用循环来操作向量中的每个元素,从而提高代码的效率和可读性。以下是几个利用向量化简化循环和控制结构的例子:

计算向量元素的平方

筛选满足条件的元素

计算两个向量对应元素的和

6.文件操作

先来看两个最常用的函数setwd()和dir(),他们分别用于设置当前工作目录和列出指定目录中的文件和子目录。

setwd()

这个函数的使用比较简单,只需要在括号里面输入我们想要设置的工作路径即可,setwd这个函数的参数不允许省略

dir()

我的D盘里面有一先个叫做123的文件夹,里面放了这么几个文件

在我使用dir函数并把路径设置为"D:/123"并运行就输出了这些文件名

如果在dir里面不放任何参数,则会显示当前工作路径下的所有文件名称

除了setwd函数和dir函数之外,R语言中还有需要进行文件操作的函数,比如

  1. file.exists():检查文件或目录是否存在。
  2. file.info():获取文件或目录的详细信息,如大小、修改时间等。
  3. list.files():列出目录中的文件。
  4. list.dirs():列出目录中的子目录。
  5. file.create():创建文件。
  6. file.remove():删除文件。
  7. dir.create():创建目录。
  8. file.rename():重命名文件。
  9. file.copy():复制文件。
  10. file.path():构建平台无关的文件路径。
  11. read.table() / read.csv():读取表格数据文件。
  12. write.table() / write.csv():将数据写入表格数据文件。

这些函数没有setwd和dir函数这么重要,如果需要使用的时候可以再学习他们的用法

数据的读取与存储

在R中有一个自带的数据集叫做mtcars,它包含了汽车的部分信息,下面将介绍一些读取其中信息的方式以及运行结果

head(mtcars):显示前几行

tail(mtcars):显示后几行

str(mtcars) 显示数据框结构的函数,它会显示数据框的基本结构信息,包括列名、列数据类型以及数据框的前几行数据。

'data.frame': 32 obs. of 11 variables:这个输出是str()函数的结果,它提供了关于数据框结构的描述信息。让我们逐步解释这个输出:

  • 'data.frame'::这部分指示了数据的类型,即数据框(data frame)。
  • 32 obs.:这表示数据框包含了32个观测值,即行数为32。
  • of 11 variables::这表示数据框有11个变量,即列数为11。

mode()函数用于返回对象的存储模式。对于数据框(如mtcars),这通常表示数据的总体类型。数据框通常被认为是一个列表,因此对于

mtcars这样的数据框,mode(mtcars)的输出结果为list

class()函数用于返回对象的类别或类别向量。对于数据框(如mtcars),这通常表示数据的类型。数据框通常被认为是data.frame类别的对象。

names(mtcars)返回mtcars数据框中所有列的名称,以字符向量的形式。

接下来介绍针对数据类型和针对数据结构的函数

数据类型包括数值型,字符型,逻辑型,复数型等,其中数值型又分为整数型和双精度型两种

数据结构包括向量vector,矩阵matrix,数组array,数据框data.frame,因子factor,列表list

以is.data.frame() 和 as.data.frame()为例

    • is.data.frame() 用于检查一个对象是否为数据框。如果对象是数据框,则返回 TRUE;否则返回 FALSE。
    • as.data.frame() 是用于将其他类型的对象转换为数据框的函数。它可以将矩阵、列表或向量等其他数据类型转换为数据框。

# 将列表转换为数据框 my_list <- list(x = 1:5, y = letters[1:5]) df_from_list <- as.data.frame(my_list) print(df_from_list)

read.table()

read.table()是R语言中用于从文本文件中读取数据并创建数据框的函数。它通常用于读取以制表符、逗号或其他分隔符分隔的数据文件。下面是read.table()函数的基本用法和一些重要参数:

read.table(file, header = FALSE, sep = "", quote = "\"'", ...)

  • file:要读取的文件的路径或连接。
  • header:一个逻辑值,指示是否将文件的第一行作为列名。默认为FALSE。
  • sep:一个字符,指定数据中字段之间的分隔符,默认为空白字符。
  • quote:一个字符向量,指定引号字符。默认为"\"'",表示双引号和单引号都被视为引号。
  • ...:其他参数,例如colClasses用于指定每列的数据类型。

举例:

# 从CSV文件中读取数据,并将第一行作为列名 data <- read.table("data.csv", header = TRUE, sep = ",") # 从文本文件中读取数据,字段之间使用制表符分隔 data <- read.table("data.txt", header = TRUE, sep = "\t") # 如果你知道每列的数据类型,你可以使用colClasses参数来提高读取效率 data <- read.table("data.txt", header = TRUE, sep = "\t", colClasses = c("numeric", "character", "factor"))

read.table()是一个非常灵活和常用的函数,可以根据你的需要进行各种配置,以读取各种格式的数据文件。

read.csv()

read.csv()函数与read.table()函数非常相似,但是它是read.table()函数的一个特殊版本,用于读取逗号分隔的数据文件(CSV文件)。它的使用方式与read.table()几乎相同,只是省略了一些参数的设置,因为在读取CSV文件时,常见的参数已经设定为适当的默认值。下面是read.csv()函数的基本用法:

read.csv(file, header = TRUE, sep = ",", quote = "\"", ...)

  • file:要读取的文件的路径或连接。
  • header:一个逻辑值,指示是否将文件的第一行作为列名。默认为TRUE。
  • sep:一个字符,指定数据中字段之间的分隔符。在CSV文件中,通常为逗号","。
  • quote:一个字符,指定引号字符。默认为双引号"\""。
  • ...:其他参数,例如colClasses用于指定每列的数据类型。

举例:

# 从CSV文件中读取数据,并将第一行作为列名 data <- read.csv("data.csv") # 如果你知道每列的数据类型,你可以使用colClasses参数来提高读取效率 data <- read.csv("data.csv", colClasses = c("numeric", "character", "factor"))

read.csv()是一个非常方便的函数,用于读取常见的CSV文件,省去了设置参数的麻烦。

write.table()函数是用于将数据写入文件的函数,它的作用是将数据框或矩阵写入到文本文件中。与read.table()和read.csv()函数类似,write.table()函数也是R语言中常用的数据输入输出函数之一。

write.table(x, file, sep = " ", quote = TRUE, row.names = TRUE, col.names = TRUE, ...)

x:要写入文件的数据框或矩阵。

file:要写入的文件路径或连接。

sep:一个字符,指定字段之间的分隔符。默认为一个空格。

quote:一个逻辑值,指定是否在字符字段周围加上引号。默认为TRUE,即加上引号。

row.names:一个逻辑值或字符向量,指定是否在输出中包含行名。默认为TRUE,即包含行名。

col.names:一个逻辑值或字符向量,指定是否在输出中包含列名。默认为TRUE,即包含列名。

...:其他参数,例如append参数用于指定是否将数据追加到现有文件中。

举例:

# 将数据框写入到文本文件中 write.table(my_data, "output.txt", sep = "\t", quote = FALSE, row.names = FALSE) # 将矩阵写入到文本文件中,不包含行名和列名 write.table(my_matrix, "output.txt", sep = ",", row.names = FALSE, col.names = FALSE)

write.table()函数可以将数据以指定的格式写入到文本文件中,方便进行数据的存储和共享。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python-pandas基础学习

可参考&#xff1a; pandas&#xff1a;http://pandas.pydata.org/docs/user_guide/10min.html 一、基础知识 DataFrame 方法&#xff0c;可以将一组数据&#xff08;ndarray、series, map, list, dict 等类型&#xff09;转化为表格型数据 import pandas as pd data {name: …

前端三件套 | 综合练习:模拟抽奖活动,实现一个简单的随机抽取并显示三名获胜者

随机运行结果如下&#xff1a; 参考代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><tit…

鸿蒙-自定义组件-语法

目录 语法组成 在学习自定义组件前&#xff0c;先看一下ArkTS的组成 装饰器 用于装饰类、结构、方法以及变量&#xff0c;并赋予其特殊的含义。如上述示例中Entry、Component和State都是装饰器 Entry 表示该自定义组件为入口组件 Component 表示自定义组件 State 表示组…

python基础——字符串的常见操作方法【下标索引,index,count,len,replace,split,strip】

&#x1f4dd;前言&#xff1a; 字符串是一种有序的&#xff0c;允许重复字符串存在的&#xff0c;不可修改的序列 这篇文章主要总结一下python中有关字符串的部分相关知识&#xff0c;以及字符串的常见操作方法&#xff1a; 1&#xff0c;和其他序列极其类似的操作方法 2&…

2024/03/18(网络编程·day4)

一、思维导图 二、广播 广播发送端 #include<myhead.h> int main(int argc, const char *argv[]) {//1、创建套接字int sfd socket(AF_INET,SOCK_DGRAM,0);if(sfd -1){perror("socket error");return -1;}//2、设置允许广播int broadcast 1;if(setsockopt…

嵌入式DSP教学实验箱操作教程:2-20 数模转换实验(模拟SPI总线输出电压值)

一、实验目的 掌握GPIO模拟SPI总线的使用&#xff0c;了解AD5724的芯片特性和使用&#xff0c;并实现基于AD5724输出电压值。 二、实验原理 StarterWare StarterWare是一个免费的软件开发包&#xff0c;它包含了示例应用程序。StarterWare提供了一套完整的GPIO寄存器配置接…

在吗?腾讯云服务器2024降价了61元一年,要么?

腾讯云服务器多少钱一年&#xff1f;61元一年起。2024年最新腾讯云服务器优惠价格表&#xff0c;腾讯云轻量2核2G3M服务器61元一年、2核2G4M服务器99元一年可买三年、2核4G5M服务器165元一年、3年756元、轻量4核8M12M服务器646元15个月、4核16G10M配置32元1个月、312元一年、8核…

QT C++ QButtonGroup应用

//QT 中&#xff0c;按钮数量比较少&#xff0c;可以分别用各按钮的信号和槽处理。 //当按钮数量较多时&#xff0c;用QButtonGroup可以实现共用一个槽函数&#xff0c;批量处理&#xff0c;减少垃圾代码&#xff0c; //减少出错。 //开发平台&#xff1a;win10QT6.2.4 MSVC…

IDEA调试入门指南

IDEA调试前准备 一、准备调试环境 在开始调试之前&#xff0c;确保你的IDEA已经正确安装并配置好。打开你的项目&#xff0c;确保所有的依赖都已正确加载&#xff0c;并且项目能够正常编译和运行。 二、设置断点 断点是调试过程中非常关键的一部分&#xff0c;它允许你在代…

O2OA红头文件流转与O2OA版式公文编辑器基本使用

O2OA开发平台在流程管理中&#xff0c;提供了符合国家党政机关公文格式标准&#xff08;GB/T 9704—2012&#xff09;的公文编辑组件&#xff0c;可以让用户在包含公文管理的项目实施过程中&#xff0c;轻松地实现标准化公文格式的在线编辑、痕迹保留、手写签批等功能。并且可以…

使用PySpider进行IP代理爬虫的技巧与实践

目录 前言 一、安装与配置PySpider 二、使用IP代理 三、IP代理池的使用 四、处理代理IP的异常 五、总结 前言 IP代理爬虫是一种常见的网络爬虫技术&#xff0c;可以通过使用代理IP来隐藏自己的真实IP地址&#xff0c;防止被目标网站封禁或限制访问。PySpider是一个基于P…

15届蓝桥杯备赛(2)

文章目录 刷题笔记(2)二分查找在排序数组中查找元素的第一个和最后一个位置寻找旋转排序数组中的最小值搜索旋转排序数组 链表反转链表反转链表II 二叉树相同的树对称二叉树平衡二叉树二叉树的右视图验证二叉搜索树二叉树的最近公共祖先二叉搜索树的最近公共祖先二叉树层序遍历…

为 java 开发者设计的性能测试框架,用于压测+测试报告生成

拓展阅读 junit5 系列教程 基于 junit5 实现 junitperf 源码分析 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) Junit performance rely on junit5 and jdk8.(java 性能测试框架。压测测试报告生成。) junitperf junitperf 是一款为 java 开…

回归预测 | Matlab实现SO-BP蛇算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现SO-BP蛇算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现SO-BP蛇算法优化BP神经网络多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现SO-BP蛇算法优化BP神经网络多变量回归预测&#xff08;完整源码和数据) …

婚恋相亲红娘牵线系统功能介绍

婚恋相亲红娘牵线系统是一个综合性的婚恋交友平台&#xff0c;它集成了多种功能以帮助用户找到心仪的伴侣。以下是其主要功能的详细介绍&#xff1a; 用户信息深度分析和匹配&#xff1a;该系统利用大数据和人工智能技术&#xff0c;对用户的基本信息&#xff08;如年龄、身高…

基于HSV色度空间的图像深度信息提取算法FPGA实现,包含testbench和MATLAB辅助验证程序

目录 1.算法运行效果图预览 ​编辑2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将FPGA结果导入到matlab显示结果如下&#xff1a; matlab的对比测试结果如下&#xff1a; 2.算法运行软件版本 vivado2019.2 matlab2022a…

Pytest 教程:从 0 到 1 搭建 Pytest 接口自动化测试项目

从 0 到 1 搭建 Pytest 接口自动化测试项目 1.创建项目目录 mkdir Pytest-API-Testing-Demo 2.项目初始化 // 进入项目文件夹下cd Pytest-API-Testing-Demo// 创建项目 python 项目虚拟环境python -m venv .env// 启用项目 python 项目虚拟环境source .env/bin/activate 3…

ubuntu下docker安装

目录 官网链接 安装步骤 docker使用方法 拉取镜像 创建镜像 运行镜像 查看运行结果 保存镜像文件 传输到windows下 官网链接 Install Docker Engine on Ubuntu | Docker Docs 安装步骤 1.运行以下命令卸载所有冲突的包&#xff1a; for pkg in docker.io docker-d…

基于Spring Boot的社区便民服务管理系统的设计与实现

摘 要 二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多&#xff0c;而在线管理系统刚好能满足这些需求&#xff0c;在线管理系统突破了传统管理方式的局限性。于是本文针对这一…

【海贼王的数据航海】排序——冒泡|快速|归并排序|总结

目录 1 -> 交换排序 1.1 -> 冒泡排序 1.1.1 -> 代码实现 1.2 -> 快速排序 1.2.1 -> hoare版本 1.2.2 -> 挖坑法 1.2.3 -> 前后指针法 1.2.4 -> 快速排序(递归版) 1.2.5 -> 快速排序(非递归版) 2 -> 归并排序 2.1 -> 归并排序 2.…