R 语言学习笔记

1. 基础语法

赋值

a = 10;
b <- 10;# 表示流向,数据流向变量,也可以写成10 -> b

创建不规则向量

不用纠结什么是向量,就当作一个容器,数据类型要相同

a = c("我","爱","沛")

创建一定规则的向量

rep就是repeat的意思,就是重复

x <- seq(1, 10, by = 0.5)  # 得到1.0  1.5  2.0  2.5  3.0  3.5  4.0  4.5  5.0  5.5  6.0  6.5  7.0  7.5  8.0  8.5  9.0  9.5 10.0
x <- seq(1, 10, length = 21)  # 从1到10,得到21个等间距数
x <- rep(2:5, 2)  # 得到2 3 4 5 2 3 4 5
x <- rep(2:5, rep(2, 4))  # 得到2 2 3 3 4 4 5 5

创建连续的数字向量

a = c(1:5)  # 可以得到1 2 3 4 5

运算符

数值运算符
	+  -  *  /
	^  # 乘方
	%%  # 求余
	%/%  # 整除

关系运算符
	>  <  ==  !=  >=  <=

逻辑运算符
	&&  ||  !

其他运算符
	:  # 冒号运算符,用于创建一系列数字的向量。
	%in%  # 用于判断元素是否在向量里,返回布尔值,有的话返回 TRUE,没有返回 FALSE。
	%*%  # 用于矩阵与它转置的矩阵相乘。

数学函数

常见对一些数学函数有:
在这里插入图片描述
R 中的 round 函数有些情况下可能会"舍掉五"。当取整位是偶数的时候,五也会被舍去
在这里插入图片描述

常见常量

  • 26个大写字母 LETTERS
  • 26个小写字母 letters
  • 月份简写 month.abb
  • 月份名称 month.name
  • π 值 pi

缺失值转为0

x [!is.na(x)]=0

数字与字符串互换

字符串转为数值型
as.integer("12.3")  # 字符串转整数,得到12
as.double("11.666")  # 字符串转小数,得到11.666
数值型转为文本

使用 paste()

a = paste(1) 

formatC() 数值作为字符串输出

formatC(1/3, format = "e", digits = 4)  # digits表示小数点位数
formatC(1/3, format = "f", digits = 4)

as.character()

a = as.character(66)

流程控制

if 语句

x <- 50L
if(is.integer(x)) {
   print("X 是一个整数")
} else {
   print("X 不是一个整数")
}

while 循环

a = 1
while(a<5){
    print('hello')
}

for 循环

a = c([1:4])

for(i in a){
    print(i)
}

repeat循环

a = 1
sum = 0
repeat{
  if(sum>10){
    break  # break终止循环,next继续下一次循环,就好像python的continue
  }
  sum=sum+a
  a=a+1
}
print(sum)

2. 常用数据结构

在这里插入图片描述

向量:c()

特点:

  • 只能存放一种元素,如果存在数字和字符串,就会自动转为字符串哦
  • 可以试用索引获取元素(索引从1开始)
  • 可以使用切片操作截取一个片段,两端都是闭区间、

使用append添加值

good_sample_p <- append(good_sample_p,p)

向量加减乘除运算

有一个好玩的是,向量的循环利用法则,比如a=c(1,2,3),b=c(4,5),这时如果让a+b就会有警告信息,但是它不报错。

以a+b为例:其实就是(1+4,2+5,3+4),现在懂了什么是循环利用了吧

一些常用的函数

  • sqrt(x), log(x), exp(x), sin(x), cos(x), tan(x), abs(x)分别表示平方根, 对数, 指数, 三角函数及绝对值.
  • sort(x, decreasing=FALSE)返回按x的元素从小到大排序的结果向量.
  • order(x)是使得x从小到大排列的元素下标向量
  • sort(x)与x[order(x)]是等效的
  • numeric(n): 表示长度为n的零向量
  • all(log(10 * x) > x):判断一个逻辑向量是否为真值
  • any(log(10 * x) > x): 判断是否有真值
  • is.na(c(1, 2, NA)): 判断x的每一个元素是否是缺失值

向量索引

R中向量的下标从 1 开始,这与通常的统计或数学软件不一致,C语言、Python等编程语言的向量下标则从 0 开始!

不要被python带跑了啊,R的负值索引表示删除第几个元素

x = c(42, 7, 64, 9)
x[2]  # 访问第2个元素
x[3] = -1  # 修改第三个数据的值
x[-4]  # 删除第四个元素
x[x < 10]  # 表示选取x<10的元素
x[c(1, 4)]  # 向量索引,是不是很神奇?

定义向量时可以给元素加上名字

ages <- c(Li = 23, Zhang = 33, Wang = 45)
# ages为
Li   Zhang  Wang 
23    33         45 
# 访问时可以用通常的方法,还可以用元素名访问
ages["Zhang"]
# 还可以定义向量后,再后加上名字
age1 = c(21, 34, 56)
names(age1) = c("Zhang", "Ding", "Liu")

矩阵:matrix

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

data 是矩阵的数据,通常为向量
nrow 为行数,ncol 为列数
byrow 为 TRUE 时,是横着的1,2,3,4,否则变成竖着的1,2,3了

创建矩阵

matrix(1:12,ncol=4,byrow=TRUE)
# 得到的数据
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12

常用函数

  • head(a,10) 查看矩阵前10
  • tail(a,10) 查看矩阵后十行
  • cbind(): 进行上下合并
  • rbind(): 进行左右合并
  • c(A): 显示A的所有向量,是按列拉直的向量
  • det(A): 求行列式的值
  • solve(A): 求逆
  • eigen(A): 特征值和特征向量

矩阵运算

类似于向量的加减乘除

参与运算一般是相同形状的,形状不一致的向量和矩阵也可进行四则运算。规则是矩阵的数据按向量(按列拉直)的对应元素进行运算。

访问矩阵元素和子矩阵

  • A[2,3]#访问是矩阵的(2,3)元素7
  • A[i,]#访问第i行,A[,j] #访问第j列
  • A[,c(1,2,3)]前三列
  • A[,c(‘name1’,‘name2’)]指定列名

对矩阵的行标和列标重新命名

rownames(A)  <- c("a", "b", "c")
colnames(A) <- paste("X", 1:4, sep="")

apply函数

对矩阵想对某行(列)进行某种计算,可用apply函数:apply(x, margin, fun, …)

x表示矩阵,margin=1表示对每行计算,margin=2表示对每列计算,fun是用来计算的函数。

apply(A, 1, sum)
apply(A, 2, mean)

因子:factor

factor(x, levels = sort(unique(x), na.last = TRUE), labels, exclude = NA, ordered = FALSE)

用来把一个向量编码为一个因子

创建因子

sex = c("M","F","M","M","F")
sexf = factor(sex);sexf

常用函数

  • s.factor()检验对象是否是因子
  • as.factor()把向量转化为因子
  • levels(x)可以得到因子的水平
  • table(x)统计各类数据的频数

tapply()函数

tapply(x, INDEX, FUN=NULL,…,simplify=TRUE)

  • x是一对象,通常为一向量
  • INDEX是与X有同样长度的因子
  • FUN是要计算的函数

知道5位学生的性别,还知道这5位学生的身高,分组求身高的平均值

sex = c("M","F","M","M","F")
height = c(174, 165, 180, 171, 160)
tapply(height, sex, mean)

列表:list

创建列表

rec <- list(name="黎明", age=30, scores=c(85,76,90));rec
# 得到的数据
$name
[1] "黎明"

$age
[1] 30

$scores
[1] 85 76 90

列表的引用与修改

列表元素可用"列表名[[下标]]" 引用,列表不同于向量,每次只能引用一个元素,如rec[[1:2]]是不允许的

rec <- list(name="黎明", age=30, scores=c(85,76,90));rec
rec[[2]]  # 得到30
rec[[3]][2]  # 得到第三个元素的第二个元素,即76
# 若指定了元素的名字,则引用列表元素还可以用它的名字作为下标,
rec$age
rec[["age"]]
rec[[2]]=11  # 把30修改为11

注意:"列表名[下标]"或"列表名[下标范围]"的用法是允许的,但与前面的含义不同,它还是一个列表

数据框:data.frame

数据框通常是矩阵形式的数据,但矩阵各列可以是不同类型。数据框每列是一个变量,每行是一个观测。

和 DataFrame 类似

生成数据框

d = data.frame(name=c('黎明','周杰伦','刘德华'),age=c(30,35,28),height=c(180,175,173))
# d的值
    name age height
1   黎明  30    180
2 周杰伦  35    175
3 刘德华  28    173

as.data.frame(list)可以将列表转为data.frame(),因为列表不是可以指定名称嘛

数据框的引用

d = data.frame(name=c('黎明','周杰伦','刘德华'),age=c(30,35,28),height=c(180,175,173))
d[1:2, 2:3]  # 得到前两行,2,3列的数据
d[["age"]]  # 获取age这一列的数据
# 等价于
d$height  # 获取height这一列的数据
rownames(d) = c("one", "two", "three")  # 各行也可以定义名字,指定index

修改值

d$name[1] = "我爱你"  #将name的第一个值修改为我爱你   常用
d[1,2] = "女"  #将第1行第2列的值修改为“女”   常用
d[[1]][2] = "我爱你"  #将第一列第二个值改为“我爱你”

添加删除行列

d = df1[-2,] #删除第2行数据
d = df1[,-3] #删除第3列的数据
d = df1[-c(1,3),] #删除第1行和第3行的数据
d$r = age/weight  # 添加列r

attach()函数

R提供了函数attach()可以把变量调入内存。就是像咱们的d$height或d[[“age”]],就不用这样写了,直接写age就好了

d = data.frame(name=c('黎明','周杰伦','刘德华'),age=c(30,35,28),height=c(180,175,173))
attach(d)
r <- age/height  # /对r进行修改不会影响d的数据
# r的值
[1] 0.1666667 0.2000000 0.1618497
detach(d) #取消连接

merge()

把多个数据框合并成一个数据框

merge(data1, data2, by='ID')

数据的读取与保存

读取txt:read.table()

read.table(“filename.txt”)

读取xlsx:read.xlsx()

要先先安装xlsx包,然后导入xlsx包

data <- read.xlsx(“filename.xlsx”,n)

保存csv:write.csv()

write.csv(data,file = “文件名”)

保存 xlsx:write.xlsx()

write.xlsx(data, “data.xlsx”,sheet.name=“sheet1”)

保存R中为图片、pdf文件

以png为例

png(file="myplot.png", bg="transparent")  #文件不指定地址,默认放在getwd()里了

# 这里写你的画图程序#

dev.off()  # 记得off

# 下面是一个实例
png(file="myplot.png")
plot(1:10)
rect(1, 5, 3, 7)
dev.off()

3. R的一些常用函数

mean:获取均值

a=c(1:6)
mean(a)

median:获取中位数

a=c(1:6)
median(a)

获取众数

R语言中没有专门的函数获取众数,因此要手写

# 创建函数
getmode = function(v) {
   uniqv = unique(v)  # unique主要是返回一个把重复元素或行给删除的向量、数据框或数组
   uniqv[which.max(tabulate(match(v, uniqv)))]
}
 
# 创建向量
v = c(2,1,2,3,1,2,3,4,1,5,5,3,2,3)
 
# 调用函数
result = getmode(v)
print(result)
quantile():百分位数,默认为5个
a=c(1:6)
quantile(a)

# 得到的结果
> quantile(a)
  0%  25%  50%  75% 100% 
1.00 2.25 3.50 4.75 6.00 

summary():描述统计量

summary():获取描述性统计量,可以提供最小值、最大值、四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计等。

结果解读如下:

a=c(1:6)
summary(a)

得到的结果

> summary(a)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00    2.25    3.50    3.50    4.75    6.00 

var():计算方差

a = c(1:5)
var(a)

sd():标准差

a = c(1:5)
sd(a)

变异系数

方差除以平均值

当需要比较两组数据离散程度大小的时候,如果两组数据的测量尺度相差太大,或者数据量纲的不同,直接使用标准差来进行比较不合适,可以使用变异系数

sort、order:排序、指定排序规则

x = c(1,7,5,4,4,6,9)
x = sort(x,decreasing=FALSE)  # 返回升序排列结果,当decreasing为TRUE时为降序排列
# 或者
x_order = order(x,decreasing=FALSE)  # 返回升序后的下标, decreasing为TRUE时为降序排列
x = x[x_order]

要对一个矩阵x进行排序,先根据第一列升序排列,然后根据第二列升序排序,可以用下面的语句实现:

x[order(x[,1],x[,2]),]

注:降序的话加上decreasing参数即可。

处理缺失值

对于NA值来说,有些计算会保存,我们需要忽略NA,加上下面的参数即可:na.rm=TRUE,例如

mean(height,na.rm=TRUE)
[1] 5.855

cor():计算两个变量之间的相关系数(可略)

cor(height,log(height))

cov():两个变量之间的协方差(可略)

cov(height,log(height))

shapiro.test():判断数据是否满足正态分布

一般情况下,当返回的p-value大于0.05时表示满足。

4. R语言基础作图

  1. 图形的创建和保存
    通过交互式会话构建图形
    data0 <- read.csv(“height-weight.csv”, header=TRUE, sep=,)
    plot(data0[, 3], data0[, 4])
    abline(lm(data0[, 4]~data0[, 3]))
    title(“身高和体重关系图”)
    
    保存图形
    在这里插入图片描述
  2. 自定义图形修饰—图形参数
    通过图形参数选项定义图形的多个特征(字体、颜色、坐标轴、标题)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 标注的使用
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  4. 组合多个图形
    在这里插入图片描述

4.1 类型图

  1. 条形图
    在这里插入图片描述

  2. 饼图
    在这里插入图片描述

  3. 直方图
    在这里插入图片描述

  4. 核密度图
    在这里插入图片描述

  5. 箱线图在这里插入图片描述

  6. 点图
    在这里插入图片描述

  7. 散点图
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  8. 折线图
    在这里插入图片描述
    在这里插入图片描述

  9. 相关图
    在这里插入图片描述

  10. 马赛克图
    在这里插入图片描述

代码实现:

#1. 添加了最佳拟合曲线的散点图
attach(mtcars)
plot(wt,mpg,main="Basic Scatter plot of MPG vs. Weight",xlab="Car Weight",ylab="Miles per Gallon",pch=19)
abline(lm(mpg~wt),col="red",lwd=2,lty=1)
install.packages("car")
library("car")
scatterplot(mpg~wt|cyl,data=mtcars,lwd=2,main="Scatter plot of MPG vs. Weight by Cylinders",xlab="Weight of Car",ylab="Miles per Gallon",boxplots="xy")

#2. 散点图矩阵
pairs(~mpg+disp+drat+wt,data=mtcars,main="Basic Scatter Plot Matrix")
scatterplotMatrix(~mpg+disp+drat+wt,data=mtcars,main="Scatter Plot Matrix via car Package")
cor(mtcars[c("mpg","wt","disp","drat")])
install.packages("gclus")
library("gclus")
mydata <- mtcars[c("mpg","wt","disp","drat")]
mydata.corr <- abs(cor(mydata))
mycolors <- dmat.color(mydata.corr)
myorder <- order.single(mydata.corr)
cpairs(mydata,myorder,panel.colors=mycolors,gap=0.5,main="Variable Ordered and Colored by Correlation")

#3. 高密度散点图
set.seed(1234)
n <- 10000
c1 <- matrix(rnorm(n,mean=0,sd=0.5),ncol=2)
c2 <- matrix(rnorm(n,mean=3,sd=2),ncol=2)
mydata <- rbind(c1,c2)
mydata <- as.data.frame(mydata)
names(mydata) <- c("x","y")
with(mydata,plot(x,y,pch=19,main="Scatter plot with 10000 observations"))
with(mydata,smoothScatter(x,y,main="Scatterplot Colored by Smoothed Densities"))
install.packages("hexbin")
library("hexbin")
with(mydata,{
             bin <- hexbin(x,y,xbins=50)
			 plot(bin,main="Hexagonal Binning with 10000 Observations")})
install.packages("IDPmisc")
library("IDPmisc")
with(mydata,iplot(x,y,main="Image Scatter Plot with Color Indicating Density"))

#4. 三维散点图
install.packages("scatterplot3d")
library("scatterplot3d")
with(mtcars,scatterplot3d(wt,disp,mpg,main="Basic 3D Scatter Plot"))
with(mtcars,scatterplot3d(wt,disp,mpg,pch=16,highlight.3d=TRUE,type="h",main="3D Scatter Plot with vertical lines"))

install.packages("rgl")
library("rgl")
with(mtcars,plot3d(wt,disp,mpg,col="red",size=5))

install.packages("Rcmdr")
library("Rcmdr")
with(mtcars,scatter3d(wt,disp,mpg))

#5. 气泡图
attach(mtcars)
r <- sqrt(disp/pi)
symbols(wt,mpg,circle=r,inches=0.30,fg="white",bg="lightblue",main="Bubble Plot with point size",xlab="Weight of Car",ylab="Miles per Gallon")
text(wt,mpg,rownames(mtcars),cex=0.6)
detach(mtcars)

#6. 折线图
opar <- par(no.readonly=TRUE)
par(mfrow=c(1,2))
t1 <- subset(Orange,Tree==1)
with(t1,plot(age,circumference,xlab="Age (days)",ylab="Circumference (mm)",main="Orange Tree 1 Growth"))
with(t1,plot(age,circumference,xlab="Age (days)",ylab="Circumference (mm)",main="Orange Tree 1 Growth",type="b"))
par(opar)

Orange$Tree <- as.numeric(Orange$Tree)
ntrees <- max(Orange$Tree)
xrange <- range(Orange$age)
yrange <- range(Orange$circumference)
plot(xrange,yrange,type="n",xlab="Age (days)",ylab="Circumference (mm)")
colors <- rainbow(ntrees)
linetype <- c(1:ntrees)
plotchar <- seq(18,18+ntrees,1)
for(i in 1:ntrees) {
                    tree <- subset(Orange,Tree==i)
					lines(tree$age,tree$circumference,type="b",lwd=2,lty=linetype[i],col=colors[i],pch=plotchar[i])}
title("Tree Growth","example of line plot")
legend(xrange[1],yrange[2],1:ntrees,cex=0.8,col=colors,pch=plotchar,lty=linetype,title="Tree")

#7. 相关图
options(digits=2)
cor(mtcars)
install.packages("corrgram")
library("corrgram")
corrgram(mtcars,order=TRUE,lower.panel=panel.shade,upper.panel=panel.pie,text.panel=panel.txt,main="Correlogram of mtcars intercorrelations")

#8. 马赛克图
ftable(Titanic)
install.packages("vcd")
library("vcd")
mosaic(Titanic,shade=TRUE,legend=TRUE)

5. 基本统计分析

  1. 描述性统计分析
    在这里插入图片描述
  2. 频数表和列联表
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 相关系数和协方差
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  4. t 检验
    在这里插入图片描述
    在这里插入图片描述
  5. 组间差异的非参数检验
    在这里插入图片描述
    在这里插入图片描述
    代码实现:
#2.描述性统计变量
rawdata <- read.csv("student_score.csv",header=TRUE,sep=",",row.names="name")
dim(rawdata)
head(rawdata)
tail(rawdata)
fivenum(rawdata[,3])
sapply(rawdata[,3:5],mean)
apply(rawdata[,3:5],2,mean)
apply(rawdata[,3:5],1,mean)
aggregate(rawdata[,3:5],by=list(gender=rawdata$gender),max)
dstats <- function(x)(c(max=max(x),min=min(x)))
by(rawdata[,3:3],rawdata$gender,dstats)

#3.频数表和列联表
library("vcd")
rawdata <- Arthritis
mytable1 <- with(rawdata,table(Improved))
prop.table(mytable1)
mytable2 <- with(rawdata,table(Sex,Improved))
margin.table(mytable2,1)
margin.table(mytable2,2)
addmargins(mytable2)
addmargins(mytable2,1)
addmargins(mytable2,2)
mytable3 <- with(rawdata,table(Treatment,Sex,Improved))
mytable4 <- xtabs(~Sex+Improved,data=rawdata)
mytable5 <- with(rawdata,ftable(Sex,Improved))

chisq.test(mytable2)
mytable6 <- with(rawdata,table(Treatment,Improved))
chisq.test(mytable6)
fisher.test(mytable6)

assocstats(mytable6)

#4.相关系数和协方差
states <- state.x77[,1:6]
cov(states)
cor(states)
cor(states,method="spearman")
install.packages("ggm")
library("ggm")
pcor(c(1,5,2,3,6),cov(states))
cor.test(states[,3],states[,5])
install.packages("psych")
library("psych")
corr.test(states,use="complete",method="spearman")

#5. t检验
library("MASS")
t.test(Prob~So,data=UScrime)
with(UScrime,t.test(U1,U2,paired=TRUE))

#6. 组间差异的非参数检验
wilcox.test(Prob~So,data=UScrime)

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

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

相关文章

意向共享锁和意向排他锁

InnoDB表级锁 在绝大部分情况下都应该使用行锁&#xff0c;因为事务和行锁往往是选择InnoDB的理由&#xff0c;但个别情况下也使用表级锁&#xff1a; 1&#xff09;事务需要更新大部分或全部数据&#xff0c;表又比较大&#xff0c;如果使用默认的行锁&#xff0c;不仅这个事…

前端web入门-CSS-day06

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、标准流 二、Flex 布局 组成 主轴对齐方式 侧轴对齐方式 修改主轴方向 弹性伸缩比 弹性盒子换行…

uniapp中使用mixins(混入)使用

mixins 选项接收一个混入对象的数组。这些混入对象可以像正常的实例对象一样包含实例选项&#xff0c;这些选项将会被合并到最终的选项中&#xff0c;使用的是和 Vue.extend() 一样的选项合并逻辑。也就是说&#xff0c;如果你的混入包含一个 created 钩子&#xff0c;而创建组…

设计用户模块的schema

schema 在计算机科学中&#xff0c;schema通常指的是 数据结构的定义和约束。 关系型数据库 在关系型数据库中&#xff0c;schema指的是数据库中所有表格的定义和表格之间的关系约束&#xff0c;包括每个表格的列名、数据类型、主键、外键等等。 如果要对一个关系型数据库进行…

Leetcode-6425. 找到最长的半重复子字符串

题目描述 给你一个下标从 0 开始的字符串 s &#xff0c;这个字符串只包含 0 到 9 的数字字符。 如果一个字符串 t 中至多有一对相邻字符是相等的&#xff0c;那么称这个字符串是 半重复的 。 请你返回 s 中最长 半重复 子字符串的长度。 一个 子字符串 是一个字符串中一段…

力扣日记2481

1. 题目 LeetCode 2481. 分割圆的最少切割次数 1.1 题意 可以使用直接或半径切分&#xff0c;管他叫一次切分&#xff0c;求切分圆为n等份的最少次数。 1.2 分析 可以想到&#xff0c;对圆做n等分&#xff0c;然后每个半径看出一次切分&#xff0c;这是最多次数&#xff0c;…

Python3 列表与元组 | 菜鸟教程(六)

目录 一、Python3 列表 &#xff08;一&#xff09;简介相关 1、序列是 Python 中最基本的数据结构。 2、序列中的每个值都有对应的位置值&#xff0c;称之为索引&#xff0c;第一个索引是 0&#xff0c;第二个索引是 1&#xff0c;依此类推。 3、Python 有 6 个序列的内置…

算法刷题-字符串-替换空格

题目&#xff1a;剑指Offer 05.替换空格 力扣题目链接 请实现一个函数&#xff0c;把字符串 s 中的每个空格替换成"%20"。 示例 1&#xff1a; 输入&#xff1a;s “We are happy.” 输出&#xff1a;“We%20are%20happy.” 思路 如果想把这道题目做到极致&…

webpack提升开发体验SourceMap

一、开发场景介绍 开发中我们不可避免的会写一些bug出来&#xff0c;这时候要调试&#xff0c;快速定位到bug到底出现在哪尤为关键。 例如我故意在sum函数中写一个错误代码如下&#xff1a; 这时我们用前面章节已经写好的开发模式的webpack.dev.js运行&#xff0c;控制台会出…

【总结笔记】Spring

1 Spring容器加载配置文件进行初始化。 Spring容器加载配置文件进行初始化主要有两种形式&#xff1a; 加载配置文件进行初始化&#xff1a; ClassPathXmlApplicationContext ctx new ClassPathXmlApplicationContext(“ApplicationContext.xml”); 加载配置类进行初始化&…

业务流程自动化:ThinkAutomation Professional Crack

ThinkAutomation 助力您的业务流程自动化。自动执行本地和基于云的业务流程&#xff0c;以降低成本并节省时间。 自动化传入的通信渠道&#xff0c;监控数据库&#xff0c;对传入的Webhook&#xff0c;Web表单和聊天机器人做出反应。处理文档、附件、本地文件和其他邮件源。 …

基于Spark的气象数据分析

研究背景与方案 1.1.研究背景 在大数据时代背景下&#xff0c;各行业数据的规模大幅度增加&#xff0c;数据类别日益复杂&#xff0c;给数据分析工作带来极大挑战。气象行业和人们的生活息息相关&#xff0c;随着信息时代的发展&#xff0c;大数据技术的出现为气象数据的发展…

模板匹配笔记

模板匹配是一种最基本、最原始的模式识别的方法。通过对比某一特定物体的图案位于图像的什么地方&#xff0c;进而识别出物体。它是图像处理中最基本、最常用的匹配方法。它的局限性主要是它只能进行平行移动&#xff0c;若原图像中的匹配目标发生旋转或大小变化&#xff0c;该…

前端vue入门(纯代码)09

【09.vue中组件的自定义事件】 自定义组件链接 在vue中用的click【点击】、keyup【按键】……等事件&#xff0c;这些属于内置事件&#xff0c;也就是js自带的事件。 问题一&#xff1a;什么是组件自定义事件呢&#xff1f; 【内置事件】:是给html元素用的&#xff0c;比如s…

014、数据库管理之配置管理

配置管理 TiDB配置系统配置集群配置配置的存储位置区分TiDB的系统参数和集群参数 系统参数系统参数的作用域系统参数的修改 集群参数集群参数的修改配置参数的查看 实验一&#xff1a; 在不同作用域下对数据库的系统参数进行修改session级别global级别 实验二&#xff1a; 修改…

【TCP/IP】多进程服务器的实现(进阶) - 信号处理及signal、sigaction函数

目录 信号 signal函数 sigaction函数 用信号来处理僵尸进程 在之前我们学习了如何处理“僵尸进程”&#xff0c;不过可能也会有疑问&#xff1a;调用wait和waitpid函数时我们关注的始终是在子进程上&#xff0c;那么在父进程上如何实现对子进程的管控呢&#xff1f;为此&am…

零基础速成simulink代码生成——简单滤波器实现2

simulink setting 找到model settings solver求解器配置 Code Generation 代码生成配置 生成代码报告 添加stateflow注释 可以将变量保存在定义的文件(选) 实践 简单一阶滤波器

使用一键安装工具快速搭建 ESP-IDF 开发环境 (Windows)

我们收到用户对 ESP-IDF SDK 软件开发环境感到搭建难、门槛高的反馈。为解决用户在此方面的问题。为此&#xff0c;我们推出本期教程介绍在 Windows 操作系统下使用一键安装工具快速搭建 ESP-IDF 开发环境。 您可以观看下面的教程视频&#xff0c;也可以阅读接下来本篇的图文教…

CVPR 2023 | 图像超分,结合扩散模型/GAN/部署优化,low-level任务,视觉AIGC系列

1、Activating More Pixels in Image Super-Resolution Transformer 基于Transformer的方法在低级别视觉任务中&#xff0c;如图像超分辨率&#xff0c;表现出了令人印象深刻的性能。Transformer的潜力在现有网络中仍未得到充分发挥。为了激活更多的输入像素以实现更好的重建&a…

有哪些工具软件一旦用了就离不开?

&#x1f496;前言 目前&#xff0c;随着科技的快速发展&#xff0c;电脑已经进入了许许多多人的生活 &#xff0c;在平日的学习、工作和生活里&#xff0c;我们会用的各种各样的强大软件。市面上除了某些大公司开发在强大软件&#xff0c;还有各路大神开发具有某些功能的强大…