R语言学习笔记——入门篇:第五章-高级数据管理

news2024/11/16 19:48:31

R语言

R语言学习笔记——入门篇:第五章-高级数据管理


文章目录

  • R语言
  • 一、数值与字符处理函数
    • 1.1、数学函数
    • 1.2、统计函数
    • 1.3、概率函数
    • 1.4、字符处理函数
    • 1.5、其他实用函数
    • 1.6、将函数应用于矩阵与数据框
  • 二、控制流
    • 2.1、循环(for,while)
      • 2.1.1、for循环
      • 2.1.2、while循环
    • 2.2、条件执行(if-else,ifelse,switch)
      • 2.2.1、if-else语句
      • 2.2.2、ifelse语句
      • 2.2.3、switch语句
  • 三、自编函数
  • 四、整合与重构
    • 4.1、转置
    • 4.2、整合数据
    • 4.3、reshape2包
      • 4.3.1、融合
      • 4.3.1、重铸


一、数值与字符处理函数

1.1、数学函数

函数功能示例
abs(x)绝对值abs(-4) 返回值为4
sqrt(x)平方根sqrt(16) 返回值为4
ceiling(x)向上取整ceiling(3.456) 返回值为4
floor(x)向下取整floor(3.456) 返回值为3
trunc(x)向0的方向取整trunc(3.456) 返回值为3
round(x,digits = n)确认小数round(3.456,digits=2) 返回值为3.45
signif(x,digits = n)确认有效数字signif(3.456,digits = 2) 返回值为3.4
cos(x),sin(x),tan(x)余弦,正弦和正切
aces(x),asin(x),atan(x)反余弦,反正弦和反正切
cosh(x),sinh(x),tanh(x)双曲余弦,双曲正弦和双曲正切
acosh(x),asinh(x),atanh(x)反双曲余弦,反双曲正弦和反双曲正切
log (x,base = n)对数函数,底数为n
log(x)自然对数log(10) 返回值为2.3026
log10(x)常用对数log10(10) 返回值为1
exp(x)指数函数,y=e^x (x∈R)exp(2.3026) 返回值为10

1.2、统计函数

函数功能示例
mean(x)平均数mean(c(1,2,4,7)) 返回值为3.5
median(x)中位数median(c(1,2,4,7)) 返回值为3,median(c(1,2,4,7,3)) 返回值为3
sd(x)标准差(可以直观展现数据的离散度)sd(c(1,2,3)) 返回值为1
var(x)方差(标准差的平方)var(c(1,2,3)) 返回值为1
mad(x)绝对中位差:原数据减去中位数后得到的新数据的绝对值的中位数,常用来估计标准差mad(c(1,2,3)) 返回值为1.4826
quantile(x,probs)求分位数,x为待求分位的数值型向量,probs为一个由[0,1]之间概率组成的数值向量quantile(c(1,2,3),c(.3,.84)) 返回值为 30% 位点1.60 84% 位点2.68
range(x)求值域,diff(range(x))为求极差range(c(1,2,3)) 返回值为1,3
sum(x)求和sum(c(1,2,3)) 返回值为6
diff(x,lag = a)滞后差分,lag用以指定滞后几项,默认为1diff(c(2,4,6,8),lag = 2) 返回值为4,4
min(x)求最小值min(c(1,2,3)) 返回值为1
max(x)求最大值max(c(1,2,3)) 返回值为3
scale(x,center = TRUE,scale = TRUE)为数据对象x按列进行中心化(center=TRUE,改均值)或标准化(center=TRUE,scale = TRUE,改标准差)详见数据的标准化示例
  • 数据的标准化示例
# scale()函数只能对数值型数据进行操作
# 默认情况下,scale()函数对矩阵或数据框的指定列进行均值为0,标准差为1的标准化
x <- c(1,10,6)
x1 <- scale(c(1,10,6))

> mean(x)
[1] 5.666667
> sd(x)
[1] 4.50925

> mean(x1)
[1] -3.237473e-17
# 无穷小,趋于0
> sd(x1)
[1] 1

# 标准化后的数据
> x1
            [,1]
[1,] -1.03490978
[2,]  0.96098765
[3,]  0.07392213
# 原均值
attr(,"scaled:center")
[1] 5.666667
# 原标准差
attr(,"scaled:scale")
[1] 4.50925

# 对每一列数据进行任意均值和标准差的标准化,SD为想要的标准差,M为想要的均值
x2 <- scale(x)*SD+M
# 对指定列(myvar)进行标准化,transform(DataFrame, value)函数用于修改DataFrame数据
x3 <- transform(mydata,myvar = scale(myvar)*SD+M)

1.3、概率函数

  • 概率函数也属于统计函数一类,由于其特殊性,这边单独开一节来记录
  • R中概率函数形如[dpqr]distribution_abbreviation()
    • d = 密度函数(density)
    • p = 分布函数(distribution function)
    • q = 分位数函数(quantile function)
    • r = 生成随机数(随机偏差)
  • distribution_abbreviation(),常见的概率函数
函数功能
betaBeta分布
binom二项分布
cauchy柯西分布
chisq(非中心)卡方分布
exp指数分布
fF分布
gammaGamma分布
geom几何分布
hyper超几何分布
lnorm对数正态分布
logisLogistic分布
multinom多项分布
nbinom负二项分布
norm正态分布
pois泊松分布
signrankWilcoxon符号秩分布
tt分布
unif均匀分布
weibullWeibull分布
wilcoxWilcoxon秩和分布
  • 示例
# 在区间[-3,3]上绘制标准正态曲线 
x <- pretty(c(-3,3),30)
y <- dnorm(x)
plot(x,y,type="o",xlab = "Normal Density",ylab = "Density",yaxs="i")
# 位于x=3处左侧的标准正态分布曲线下方的面积(标准正态分布曲线与x轴形成的面积为1)
pnorm(3)
[1] 0.9986501
# 均值为10,标准差为10的正态分布0.8分位点的值 
qnorm(.8,mean = 10,sd = 50)
[1] 52.08106
# 生成50个均值为10,标准差为10的正态分布随机数
rnorm(50,mean = 10,sd = 50)
 [1]   28.981974  -15.116173   -6.660369  -40.928769  -43.589561   25.176432   32.410489
 [8]   12.650211   56.113373  112.504234  -14.551558 -105.458444   60.286926  -25.460038
[15]  -24.400431   61.278568   -4.238650  -51.035886   19.065174    3.055432   10.288209
[22]   29.264020   -8.533002   42.218827   -1.024328   26.589098   64.841951   31.759075
[29]   -6.296579   67.440381   59.675193   37.419848   21.936587  -21.395304   78.032622
[36]  -20.012979  119.366650   86.630531   -1.785018  -41.321045  -25.520328   22.844185
[43]   -2.334594   -7.377130  -37.580928    7.748614  -29.245223  -73.397097   -9.011326
[50]   55.949830

在这里插入图片描述

  • 在R中存在着生成伪随机数的函数,例如:
    • runif(n) 函数:生成n个0到1区间上服从均匀分布(unif)的伪随机数
    • MASS包中的 mvrnorm(n,mean,signma) 函数生成n个,均值为mean,方差-协方差矩阵为signma的多元正态分布的数据
  • 重现伪随机数:每次调用上述函数生成的数据都不同,通过设定随机数种子,可以重现伪随机数。
    • set.seed(n) 函数,n为数值。
    • 示例
> runif(3)
[1] 0.2825283 0.9611048 0.7283944
> set.seed(1)
> runif(3)
[1] 0.2655087 0.3721239 0.5728534
> set.seed(1)
> runif(3)
[1] 0.2655087 0.3721239 0.5728534

1.4、字符处理函数

前面介绍的函数都是对数值型变量进行操作的,下面介绍字符处理函数。

函数功能示例
nchar(x)计算x中的字符数x <- c(“a”,“bc”,“defgh”) length(x)返回值为3 nchar(x[3])返回值为5
substr(x,start,stop)提取或替换一个字符向量中的子串x <- “abcdef” substr(x,2,4) 返回值为"bcd" substr(x,2,4) <- “11111"返回值为"a111ef”
grep(pattern,x,ignore.case = F,fixed = F)在x中搜索pattern。若fixed=F则pattern为正则表达式,若fixed=T则pattern为文本字符串。grep(“a”,x <- c(“a”,“bab”,“b”),fixed = T)返回值为1,2
sub(pattern,replacement,x,ignore.case = F,fixed = F)在x中搜索pattern,以replacement替换。若fixed=F则pattern为正则表达式,若fixed=T则pattern为文本字符串。sub(“\s” ,“-”,“Hello World”)返回值为Hello-World .其中\s是查找空白的正则表达式,\是R中的转义字符,为了区分写作\s
strsplit(x,split,fixed = F)在split处分割字符向量x中的元素。若fixed=F则pattern为正则表达式,若fixed=T则pattern为文本字符串。strsplit(“abc”,“”)返回值为 “a” “b” “c"strsplit(“a,bc”,”,")返回值为 “a” “bc”
paste(… ,sep = “”)连接字符串,以sep为连接符paste(“x”,1:3,sep = “”)返回值为"x1" “x2” “x3”
toupper(x)大写转换toupper(“abc”)返回值为"ABC"
tolower(x)小写转换tolower(“ABC”)返回值为"abc"
  • 正则表达式:针对函数grep(),sub(),strsplit()可以搜索正则表达式,其为文本模式的匹配提供了一套匹配的语法
    • 示例
^[hc]?at
# 用以匹配任意以0个或1个和h或c开头,后接at的字符串。
# 因此其可以匹配hat,cat,at,但不会匹配bat等其他字符串。
  • 在多数实际应用中正则表达式,文本字符串的差异性不大。

1.5、其他实用函数

函数功能示例
length(x)求x的长度length(c(“a”,“bc”,“defgh”))返回值为3
seq(from,to,by)生成一个序列,从from至to,间隔byseq(1,10,2)返回值为1 3 5 7 9
rep(x,n)将x重复n次rep(1:2,2)返回值为1 2 1 2
cut(x,n)将连续型变量x切割为有着n个水平的因子
pretty(x,n)创建美观分割点。通过选取n+1个等间距的取整值,将一个连续型变量x分为n个区间。绘图中常用。x <- pretty(c(-3,3),30) y <- dnorm(x) plot(x,y,type=“o”,xlab = “Normal Density”,ylab = “Density”,yaxs=“i”)在区间[-3,3]上绘制标准正态曲线
cat(…,file = “myfile”,append = F)连接…中的对象,将其输出到屏幕或file中cat(“Hello”,“World”,“\b.”,“I”,“am”,“fine”,“\b.”)返回值为Hello World.I am fine.
  • 转义字符
    • \n表示换行,\t表示制表符,\b表示退格,'表示单引号
    • ?Quotes以了解更多
  • cat()函数的示例解释:由于cat输出连接对象时,会以空格作为连接符,为了让两个对象中间没有连接符,所以使用了退格转义字符\b

1.6、将函数应用于矩阵与数据框

  • 函数apply()
  • 功能:将任意函数应用到矩阵,数组,数据框的任何维度上
  • 语法
apply(x,MARGIN,FUN,...)
# x为数据对象,MARGIN为维度的下标(1表示行,2表示列)
# FUN为需要使用的函数,...包括了任何想要传递给FUN的参数
  • 示例
apply(leadership,2,max)
# 计算每一列的最大值
  • 函数sapply()
  • 功能:将任意函数应用到列表的任何维度上
  • 语法
lapply(X, FUN, ...)
# x为数据对象,FUN为需要使用的函数,...包括了任何想要传递给FUN的参数
  • 示例
Student <- c("A a","B b","C c","D d")
name <- strsplit(Student," ")
Lastname <- sapply(name,"[",2)
Firstname <- sapply(name,"[",1)

> Lastname
[1] "a" "b" "c" "d"
> Firstname
[1] "A" "B" "C" "D"
# “[”可以提取某个对象一部分的函数

二、控制流

2.1、循环(for,while)

  • 重复一系列操作,直至条件不为真。

2.1.1、for循环

  • 语法
for(var in seq) statement
# var 变量
# seq 条件范围
# statement 符合条件使执行的操作
  • 示例
 i <- 1
 for(i in 1:10) 
   {i <- i + 1;
 print(i)}

[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10
[1] 11

2.1.2、while循环

  • 语法
while(cond) statement
# cond 条件范围
# statement 符合条件使执行的操作
  • 示例
i <- 1
while(i <= 10)
{
  i <- i+1;
  print(i)
}

[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10
[1] 11

2.2、条件执行(if-else,ifelse,switch)

2.2.1、if-else语句

  • 在条件为真时执行操作语句
  • 语法
if(cond) statement
if(cond) statement1 else statement2
# cond 条件
# statement 符合条件使执行的操作
  • 示例
for(i in 1:10)
{
  if(i > 5) print(i) else print(NA)
}

[1] NA
[1] NA
[1] NA
[1] NA
[1] NA
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10

2.2.2、ifelse语句

  • if-else的简化版本,只能执行二元行为(两个选项)
  • 语法
ifelse(cond,statement1,statement2)
  • 示例
for(i in 1:10)
{
  ifelse(i > 5,print(i),print(NA))
}

2.2.3、switch语句

  • 类似于其他语言中的case函数,遍历所有条件,直至匹配上后返回该条件下操作的运行结果
  • 语法
switch(expr,...)
  • 示例
require(stats)
centre <- function(x, type) {
  switch(type,
         mean = mean(x),
         median = median(x),
         trimmed = mean(x, trim = .1))
}
x <- rcauchy(10)
centre(x, "mean")
centre(x, "median")
centre(x, "trimmed")

ccc <- c("b","QQ","a","A","bb")
for(ch in ccc)
  cat(ch,":", switch(EXPR = ch, a = 1, A = 1, b = 2:3, "Otherwise: last"),"\n")

b : 2 3 
QQ : Otherwise: last 
a : 1 
A : 1 
bb : Otherwise: last

三、自编函数

  • 当现有R包无法满足你的需求时,R语言支持自己编写函数。
  • 形如
myfunction <- function(arg1,arg2,...)
{
  statements
  return(object)
}
  • 编写好的函数,可以通过将其配置入环境变量中,使R在启动时自动读取该函数。

四、整合与重构

4.1、转置

  • 函数t()
  • 功能:对矩阵,数据框进行转置,对后者行名将变为变量(列)名
    • 语法
t(x)
# x为矩阵或数据框

4.2、整合数据

  • 定义:将多组观测替换为根据这些观测计算的描述性统计量(改数据值)
  • 函数aggregate()
  • 功能:使用一个或多个by变量和预先定义好的函数来折叠数据
  • 语法
aggregate(x,by,FUN)
# x为待折叠数据对象,by为变量名组成的列表(变量必须在列表中,即使只有一个变量),这些变量将被去掉以形成新的观测
# FUN则是用来计算描述性统计量的标量函数,用以计算新观测中的值。
  • 示例
by1 <- c("red", "blue", 1, 2, NA, "big", 1, 2, "red", 1, NA, 12)
by2 <- c("wet", "dry", 99, 95, NA, "damp", 95, 99, "red", 99, NA, NA)
testDF <- data.frame(by1,by2,v1 = c(1,3,5,7,8,3,5,NA,4,5,7,9),
                     v2 = c(11,33,55,77,88,33,55,NA,44,55,77,99) )

aggregate(x = testDF, by = list(Group.by1=by1, Group.by2=by2), FUN = "mean", na.rm = F)

# 原数据
    by1  by2 v1 v2
1   red  wet  1 11
2  blue  dry  3 33
3     1   99  5 55
4     2   95  7 77
5  <NA> <NA>  8 88
6   big damp  3 33
7     1   95  5 55
8     2   99 NA NA
9   red  red  4 44
10    1   99  5 55
11 <NA> <NA>  7 77
12   12 <NA>  9 99

# 根据by1与by2整理折叠后的数据(折叠了重复项,删除了by1和by2中的NA值的行)
# by = list(Group.by1=by1, Group.by2=by2)将列自定义了名字
# na.rm=F参数、在计算和分析中不删除缺失值获得有效的计算结果
na.rm = F
  Group.by1 Group.by2  by1  by2 v1 v2
1       1      95    1   95  5 55
2       2      95    2   95  7 77
3       1      99    1   99  5 55
4       2      99    2   99 NA NA
5     big    damp  big damp  3 33
6    blue     dry blue  dry  3 33
7     red     red  red  red  4 44
8     red     wet  red  wet  1 11

4.3、reshape2包

  • 概述:reshape2包包含了对数据集的重构与整合,功能十分强大
  • 操作步骤:先将数据融合(melt),以使每一行都是唯一的标识符-变量组合,然后将数据**重铸(cast)**为你想要的形状
  • 安装
install.packages("reshape2")
library(reshape2)
  • 示例:原始数据集
    • 测量(测试变量)指最后两列的值,在知道ID,Time,变量X1/X2后可以确定测量值
IDTimeX1X2
1156
1235
2161
2224

4.3.1、融合

  • 函数melt()
  • 功能:将数据集重构为:每个测试变量独占一行,行中带有要唯一确认这个给测量所需的标识符变量。
  • 语法
melt(data, ..., na.rm = FALSE, value.name = "value")
# data为原始数据集
  • 示例
ID <- c(1,1,2,2)
Time <- c(1,2,1,2)
X1 <- c(5,3,6,2)
X2 <- c(6,5,1,4)

md <- data.frame(ID,Time,X1,X2)
md1 <- melt(md,,id = c("ID","Time"))
# 必须要指定要唯一确定每一个测量所需的变量(ID和Time),二表示测量变量名的变量(X1/X2)将由程序自动创建


  ID Time variable value
1  1    1       X1     5
2  1    2       X1     3
3  2    1       X1     6
4  2    2       X1     2
5  1    1       X2     6
6  1    2       X2     5
7  2    1       X2     1
8  2    2       X2     4

4.3.1、重铸

  • 函数dcast()
  • 功能:读取已融合的数据,并使用你提供的公式和一个(可选)用于整合数据的函数将其重铸。
  • 语法
dcast(
  data,
  formula,
  fun.aggregate = NULL,
)
# data为已融合的数据
# formula描述想要的最后结果
# fun.aggregate(可选)数据整合函数

# 其中formult的格式形如
# rowvar为标识符
# colvar为存放测量的变量
rowvar1 + rowvar2 + ... ~ colvar1 + colvar2 + ...
  • 示例
> # 不执行整合
> dcast(md1,ID+Time~variable)
  ID Time X1 X2
1  1    1  5  6
2  1    2  3  5
3  2    1  6  1
4  2    2  2  4
> dcast(md1,ID+variable~Time)
  ID variable 1 2
1  1       X1 5 3
2  1       X2 6 5
3  2       X1 6 2
4  2       X2 1 4
> dcast(md1,variable~ID+Time)
  variable 1_1 1_2 2_1 2_2
1       X1   5   3   6   2
2       X2   6   5   1   4
> 
> # 执行整合
> dcast(md1,ID~variable,mean)
  ID X1  X2
1  1  4 5.5
2  2  4 2.5
> dcast(md1,Time~variable,mean)
  Time  X1  X2
1    1 5.5 3.5
2    2 2.5 4.5
> dcast(md1,ID~Time,mean)
  ID   1 2
1  1 5.5 4
2  2 3.5 3

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

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

相关文章

从零开始带你实现一套自己的CI/CD(三)Jenkins+Harbor

目录一、简介二、安装Harbor2.1 Amd64架构安装Harbor2.2 Arm64架构安装Harbor找不到make命令找不到git命令执行make download和make compile_redis失败执行make compile_redis命令执行make prepare_arm_data命令执行make pre_update命令执行make compile COMPILETAGcompile_gol…

【OpenCV-Python】教程:4-4 SIFT 介绍

OpenCV Python SIFT (尺度不变特征变换) 【目标】 SIFT算法SIFT特征点和描述子 【理论】 前面的章节中&#xff0c;我们提到了角点检测&#xff0c;例如Harris角点&#xff0c;他们是旋转不变的&#xff0c;因为&#xff0c;图像无论如何旋转&#xff0c;其角点特性不会发生…

世界杯8强盘点

2022年卡塔尔世界杯&#xff08;英语&#xff1a;FIFA World Cup Qatar 2022&#xff09;是第二十二届世界杯足球赛&#xff0c;是历史上首次在卡塔尔和中东国家境内举行、也是第二次在亚洲举行的世界杯足球赛。除此之外&#xff0c;卡塔尔世界杯还是首次在北半球冬季举行、首次…

docker(八)compose

compose 一 简介&#xff1a; 通过前面几篇文章&#xff0c;我们了解了docker的基本知识&#xff0c;docker帮我们解决了服务打包安装的问题&#xff0c;但是随着服务的不断增多带来了如下问题&#xff1a; 多次使用Dockerfile Build Image或者DockerHub拉取Image;需要创建多…

Spark 动态资源分配参数与源码原理分析

1.1.1、Dynamic Allocation 1.1.1.1 参数说明 1.2 版本 参数名及默认值含义spark.dynamicAllocation.enabled false是否开启动态资源分配&#xff0c;主要是基于集群负载分配executorspark.dynamicAllocation.executorIdleTimeout60sexecutor空闲时间达到规定值&#xff0c…

程序人生:化解互联网 “寒冬” 危机,我教你摆脱困境

三年反复的yi情&#xff0c;近20年史无前例的互联网裁员潮汹涌而至。 寒冬来袭&#xff0c;每一个职场打工人&#xff0c;都感到了寒意。 互联网企业大裁员的底层逻辑&#xff0c;一方面是受宏观环境影响&#xff08;yq、互联网红利结束、政策变化等&#xff09;&#xff0c;…

ChatGPT震撼上市,AI也开始跟你卷了,来一起看看怎么用ChatGPT!!!

强大AI产品&#xff0c;ChatGPT震撼上市&#xff0c;程序员真的要失业了吗&#xff1f; 最近聊天机器人异常火爆&#xff0c;火爆到什么程度&#xff0c;卖个关子&#xff0c;下文解释。 OpenAI推出了ChatGPT&#xff0c;它能够回答各种各样的问题&#xff0c;包括生成代码&a…

Node.js学习下(70th)

一、Buffer 缓冲区 背景 1、浏览器没有储存图片文件等媒体文件的需求&#xff0c;JS 存的都是一些基本数据类型。 2、服务器需要存储图片/视频/音频等媒体文件&#xff0c;因此有了 Buffer 缓冲器。 1. Buffer 是什么 Buffer 是一个和数组类似的对象&#xff0c;不同是 Buf…

python代码学习1

\n 换行符号 \r 回车 \b 后退一个格 \t 制表符&#xff08;4个字符为一组&#xff0c;当不字符被占有时&#xff0c;重新生成一个制表符。如果被占据&#xff0c;不满4个字符时&#xff0c;生成剩余部分空格。&#xff09; #原字符 不希望字符串中转义字符起作用&#xff0…

FME Server 无代码环境中自动化您数据和应用集成工作流

专为现代企业打造 简化数据和应用程序集成&#xff0c;让您的数据为您所用。在FME Desktop中创作工作流&#xff0c;并使用 FME Server 将其自动化&#xff0c;以按计划或响应事件运行数据集成。 构建无代码 Web 应用程序&#xff0c;提供自助式数据提交和验证&#xff0c;并向…

Java学习之动态绑定机制

目录 举例说明 父类 子类 main类 运行结果 ​编辑 动态绑定 举例说明 父类 子类 main类 分析 运行结果 Java重要特性&#xff1a;动态绑定机制&#xff08;非常重要&#xff09; 举例说明 父类 class A {//父类public int i 10;public int sum() {return getI(…

2022年11月国产数据库大事记-墨天轮

本文为墨天轮社区整理的2022年11月国产数据库大事件和重要产品发布消息。 文章目录11月国产数据库大事记&#xff08;时间线&#xff09;产品/版本发布兼容认证排行榜新增数据库11月国产数据库大事记&#xff08;时间线&#xff09; 11月1日&#xff0c;国际知名研究机构 IDC …

什么是内存对齐

内存对齐 什么是内存对齐为什么要内存对齐内存对齐的规则结构体中内存对齐 sizeof无嵌套有嵌套 iOS中对象内存对齐 iOS中获取内存大小方式 class_getInstanceSize()malloc_size() iOS中内存对齐 实际占用内存对齐方式系统分配内存对齐方式问题 内存优化 总结 内存对齐 什么…

基于C++的AGV机器人无线控制

1 AGV系统概述 1.1AGV原理 AGV行走控制系统由控制面板、导向传感器、方向电位器、状态指示灯、避障传感器、光电控制信号传感器、驱动单元、导引磁条、电源组成。 AGV的导引&#xff08;Guidance&#xff09;是指根据AGV导向传感器&#xff08;Navigation&#xff09;所得到…

基于FFmpeg进行rtsp推流及拉流(详细教程)

目录 1.1 Windows系统 1.2 Ubuntu 和 Debian 系统 1.3 CentOS 和 Fedora 系统 1.4 macOS系统 2. 安装rtsp-simple-server 3. FFmpeg推流 3.1 UDP推流 3.2 TCP推流 3.3 循环推流 4 拉流 4.1 ffplay/VLC拉流显示 4.2 FFmpeg拉流保存成视频 1. 安装FFmpeg FFmpeg 是一…

tftp服务/nfs服务/二进制工具集/uboot基础

一、什么是系统移植 1&#xff09;系统移植就是给开发板搭建一个linux操作系统 2&#xff09;从官方获取源码&#xff0c;进行配置和编译&#xff0c;生成板子需要的镜像文件 二、为什么系统移植 1&#xff09;为后面学习驱动开发课程打基础 2&#xff09;驱动开发工程师必…

入行4年,跳槽2次,在软件测试这一行我已经悟了!

近年来&#xff0c;软件测试行业如火如荼。互联网及许多传统公司对于软件测试人员的需求缺口逐年增大。然而&#xff0c;20年的疫情导致大规模裁员&#xff0c;让人觉得行业寒冬已经到来。软件测试人员的职业规划值得我们深思。 大家对软件测试行业比较看好&#xff0c;只是因…

【云服务器 ECS 实战】专有网络 VPC、弹性网卡的概述与配置

一、ECS 专有网络 VPC1. 传统经典网络与专有网络 VPC 对比2. 建立自己的专有网络 VPC二、弹性网卡1. 弹性网卡的概念与优势2. 弹性网卡的配置一、ECS 专有网络 VPC 阿里云在早期使用的是一种传统的网络模式&#xff0c;将所有的 ECS 云服务直接建立在传统网络层之上&#xff0…

【有营养的算法笔记】归并排序

&#x1f451;作者主页&#xff1a;进击的安度因 &#x1f3e0;学习社区&#xff1a;进击的安度因&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;有营养的算法笔记 文章目录一、思路二、模板讲解三、模板测试四、加练 —— 逆序对的数量今天讲解的内容是…

[附源码]Python计算机毕业设计SSM加油站管理信息系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…