R语言基础--文件读写

From生物技能树(R第五节)

文章目录

  • 一、文件读写
    • 1.注意用project管理工作目录
    • 2、文件读取
      • 1、读取.txt文件
      • 2、读取.csv文件
      • 注意:数据框不允许重复的行名
    • 3.数据框的导出
    • 4.读取文件的其他方式(用于读取/导出文件的R包)--经验
      • 1.base
      • 2.readr
      • 3.data.table
      • 4.rio:读取xlsx比较推荐!
    • 5、练习
    • 6.总结
  • 二、掉包
  • 三、R语言作图:分三类
    • 1.常见R包和函数
    • 2._plots.R
      • 1.基础包-绘图函数
      • 2.ggplot2与ggpubr
    • 3.-ggplot2.R
    • ggplot2语法:
      • 1.ggplot2:绘图、颜色、形状
      • 2.入门级绘图模板:作图数据,横纵坐标
      • 3.属性设置(颜色、大小、透明度、点的形状,线型等)
        • 1.手动设置
        • 2.映射:按照数据框的某一列来定义图的某个属性
        • 3.映射 vs 手动设置
        • 4.能不能自行指定映射的具体颜色?
        • 5.区分color和fill两个属性
          • 1.空心形状和实心形状都用color设置颜色
          • 2.既有边框又有内心的,才需要color和fill两个参数
    • 4.拼图
    • 5.导出
  • 四、练习1(5_exercise.R)
    • 练习2


一、文件读写

1.注意用project管理工作目录

不然就会报错
在这里插入图片描述
在这里插入图片描述

2、文件读取

#read.csv() 函数是用来读取CSV(逗号分隔值)文件并将其转换为数据框(data frame)的函数。CSV文件是一种常见的数据存储格式,广泛应用于数据交换和数据分析。例如,如果你有一个名为 data.csv 的文件,它位于当前工作目录中,并且第一行包含列名,你可以使用以下命令读取这个文件:my_data <- read.csv("data.csv")
这将创建一个名为 my_data 的数据框,其中包含了CSV文件中的数据。如果CSV文件使用分号作为字段分隔符,你可以指定 sep 参数:my_data <- read.csv("data.csv", sep = ";")#通常用于读取txt格式,read.table() 是R语言中的一个基础函数,用于读取文本文件并将其转换为数据框(data frame)。这个函数非常灵活,可以处理多种不同的数据格式,不仅仅是表格数据。它通常用于读取那些没有内置读取函数的文本文件格式。
read.table() #read.delim()也可以读取txt文件,不常用但是读txt文件时比read.table不容易出错
#两者都属于read.系列函数
?read.table()两者的帮助文档都在一起,都属于read系列函数,参数通用,默认值不同函数有所不同,如header列名参数,seq分隔符参数等。

在这里插入图片描述

如果想知道文件读入后是什么数据结构,应该class(?)
A.test
B.“ex3.csv”
答案:应该选A,因为"ex3.csv"是个文件名,文件名加双引号,不是变量
文件和变量的区别,从工作目录下可以找到"ex3.csv"这个文件名,而关掉R找不到test,test是r语言里的数据
在这里插入图片描述

1、读取.txt文件

#查看,发现问题,读取的时候第一行变成了列名,列名不属于表格的正式内容,
ex1 <- read.table("ex1.txt")
#因为数据框的一列属于向量,而一列只能有一种类型的向量,字符的包容性更大,这样的话剩下的数值型都会被强制转换为字符型,因为对于数据框来说一列只能有一种数据类型
> ex1[2,4]
[1] "45351"
#遇到报错,查看帮助文档,寻找解决方案,把列名归位,read.table中header的默认值为F,意思是文件内不包括列名,如果包括的话要改为T
x1 <- read.table("ex1.txt",header = TRUE)

在这里插入图片描述

2、读取.csv文件

#文件查看,和excel查看相比,因为R语言列名不允许出现特殊字符,列名中的-变成了.,因为列名中有特殊字符,被强制转换了,行名变成了第一列,没有变成行名,上面多了一个X,查看帮助文档,
> #2.读取ex2.csv
> ex2 <- read.csv("ex2.csv")
> View(ex2)
> ex2 <- read.csv("ex2.csv",row.names = 1,check.names = F)
> 
> row.names = 1的作用是把第一列设置成行名
> check.names = F意思是不检查列名中的特殊字符

在这里插入图片描述

注意:数据框不允许重复的行名

如有重复的话会报错,解决方法:需要先不按行名读进来,去重复,然后再row.names=rod$A

rod = read.csv("rod.csv")

在这里插入图片描述

3.数据框的导出

将数据框导出为一个表格文件

write.csv(ex2,file = "example.csv")  #用的多,记得写后缀.csv
write.table(ex2,file = "example.txt") #用的少,记得写后缀.txt

在这里插入图片描述

4.读取文件的其他方式(用于读取/导出文件的R包)–经验

用于读写文件的r包有很多,read.table、read.csv等都属于base,不用加载任何R包即可使用,有一些其他的R包也可以用于读写文件,参数更智能

1.base

2.readr

大神写的,打开会比base快,但不推荐用

3.data.table

> library(data.table)
> ex1 = fread("ex1.txt")
> View(ex1)
> class(ex1)
[1] "data.table" "data.frame"
#不用设置header=T

多了一个属性叫data.table,是一种特殊的数据框,不过不常用,因此可去除data.table这种属性


> ex1 = fread("ex1.txt",data.table = F)
> class(ex1)
[1] "data.frame"
#加上后面的参数之后data.table属性就消失了
ex2 = fread("ex2.csv",data.table = F)
#缺点:fread没有设置行名的参数,因为大神觉得行名是个不应该存在的东西…………
library(tibble)
ex2 = column_to_rownames(ex2,"V1")
#又想用fread,又想设置行名,于是只能用另一个函数来设置行名,在tibble的R包里,函数column_to_rownames()可以设置行名,即第一列设置为行名

4.rio:读取xlsx比较推荐!

#一个函数支持读取很多格式,见帮助文档,#如果没有特殊情况,excel文件推荐用import()来读取

library(rio)
ex1 = import("ex1.txt")

#如果excel文件含有多个工作博,会用到函数import_list,这种场景用的较少,用时现学即可

#一个函数支持导出很多格式,见帮助文档

export(ex1,file = "ex1.xlsx")

在这里插入图片描述

5、练习

练习5-1:
1.读取GSE217012_Normalized_RPKM_LOG2_matrix.txt.gz(已保存在工作目录)
注 :gz是压缩格式,可以不用解压,直接读取

#加上check.name = F,是因为有特殊字符,经常加着
x1 = read.delim("GSE217012_Normalized_RPKM_LOG2_matrix.txt.gz",check.name = F)
x1 = data.table::fread("GSE217012_Normalized_RPKM_LOG2_matrix.txt.gz",data.table = F)
x3 = rio::import("GSE217012_Normalized_RPKM_LOG2_matrix.txt.gz")

2.加载y.Rdata(已保存在工作目录),求gene1列的平均值

如果你看到 y.Rdata,这通常意味着这是一个包含了至少一个对象的文件,该对象的名称是 y。这个文件可以通过R语言中的 load() 函数来读取。以下是如何加载 .RData 文件的基本命令:

> load("y.Rdata")
> mean(y$gene1)
Error in h(simpleError(msg, call)) : error in evaluating the argument 'x' in selecting a method for function 'mean': $ operator is invalid for atomic vectors# $不让用,是因为它不是一个数据框
> class(y)
[1] "matrix" "array" 
> mean(y[,1])
> #是个矩阵
[1] NA
Warning message:
In mean.default(y[, 1]) : argument is not numeric or logical: returning NA
> y[,1]
GSM1 GSM2 GSM3 GSM4 GSM5 GSM6 
"40" "20" "51" "46" "38" "49" 
#取出的是向量,可转换格式
> mean(as.numeric(y[,1]))
[1] 40.66667
> #why?
> y[,1] = as.numeric(y[,1])
> y[,1]
GSM1 GSM2 GSM3 GSM4 GSM5 GSM6 
"40" "20" "51" "46" "38" "49" 
#没改成功是因为y是一个矩阵,没办法单独改一列的内容,一个矩阵里有两种数据类型的时候还是会把他兼容回去,

注意:转换数据类型的前提条件是数据框里只能有一种数据类型,需要重视数据类型,数据结构

load("y.Rdata")
mean(as.numeric(y[,"gene1"]))
## [1] 40.66667

一定要经常检查数据

6.总结

在这里插入图片描述
在这里插入图片描述

header 管行名,check.names管列名,row.name管要不要检查列名

在R语言中,header 是一个参数,经常出现在读取数据文件的函数中,如 read.csv() 或 read.table()。这个参数决定了函数在读取文件时是否应该将文件的第一行作为列名。以下是一些使用 header 参数的常见场景:read.csv():读取CSV文件时,如果你设置 header = TRUE,R会将文件的第一行作为列名。默认情况下,read.csv() 函数的 header 参数就是 TRUE。my_data <- read.csv("data.csv", header = TRUE)
如果CSV文件的第一行不是列名,你应该将 header 设置为 FALSE。read.table():在读取文本文件时,read.table() 函数的 header 参数默认为 FALSE。如果你想让R将第一行作为列名,你需要将其设置为 TRUE。my_data <- read.table("data.txt", header = TRUE)
read.delim() 和 read.delim2():这些函数是 read.table() 的变体,它们默认将第一行视为列名,即 header = TRUE
在R语言中,check.names 是 read.table()、read.csv() 和其他相关函数的一个参数,用于控制是否检查并自动修改数据框中的列名以确保它们是合法的R变量名。默认情况下,read.table() 和 read.csv() 函数会将列名作为字符型读取,而不会检查它们是否是合法的R变量名。如果你希望函数自动将列名修改为合法的变量名,可以设置 check.names = TRUE。
在R语言中,rownames() 函数用于获取或设置数据框(data frame)、矩阵(matrix)或其他列表(list)对象的行名(row names)。

二、掉包

仿照:语雀上”小洁怎么会分身“
添加链接描述

#install.packages("scatterplot3d")
library(scatterplot3d)
my_color = c("#66C2A5FF", "#FC8D62FF", "#8DA0CBFF")colors = my_color[as.numeric(iris$Species)]
#因子转换为数值是可以转换的p1 = scatterplot3d(iris[,1:3],color = colors,main="iris",pch = 16)legend(p1$xyz.convert(8.5, 2.5, 5), legend = levels(iris$Species),col = my_color, pch = 16)

#如果套用自己的数据

只需要更改iris$Species,代表分类的那一列,以及iris[,1:3]带入自己的数据
#install.packages("scatterplot3d")
library(scatterplot3d)
my_color = c("#66C2A5FF", "#FC8D62FF", "#8DA0CBFF","#fe4632")dat = data.frame(a = rnorm(100),b = rnorm(100),c = rnorm(100),d = as.factor(rep(c("m","n","o","p"),each = 25)))colors = my_color[as.numeric(dat$d)]p1 = scatterplot3d(dat[,1:3],color = colors,main="zyy",pch = 16)legend(p1$xyz.convert(5, 2, 2), legend = levels(iris$Species),col = my_color, pch = 16)

在这里插入图片描述

三、R语言作图:分三类

展示自己的数据

1.常见R包和函数

在这里插入图片描述

2._plots.R

1.基础包-绘图函数

高级:画一整张图,低级:修改图中某个元素
在这里插入图片描述

plot(iris[,1],iris[,3],col = iris[,5]) 
text(6.5,4, labels = 'hello')

在这里插入图片描述

2.ggplot2与ggpubr

ggplot2 中坚力量,语法有个性,更加强大

library(ggplot2)
## Warning: 程辑包'ggplot2'是用R版本4.3.2 来建造的
ggplot(data = iris)+geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species))

在这里插入图片描述

ggpubr 新手友好型,在ggplot2的基础上进行了简化和美化,没有灵魂,可扩展性没有那么强

library(ggpubr)
## Warning: 程辑包'ggpubr'是用R版本4.3.2 来建造的
ggscatter(iris,x="Sepal.Length",y="Petal.Length",color="Species")

在这里插入图片描述

3.-ggplot2.R

ggplot2语法:

在这里插入图片描述

1.ggplot2:绘图、颜色、形状

library(ggplot2)

2.入门级绘图模板:作图数据,横纵坐标

在这里插入图片描述

ggplot(data = iris)+geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length))

数据是iris,geom_point是绘图函数,两个列名分别传给了x和y作为横纵坐标,
ggplot独有的语法特点:列名没有引号,+号用于连接两个函数,行末写加号,说明两个代码在画同一张图,+会使缩进两个字目

3.属性设置(颜色、大小、透明度、点的形状,线型等)

1.手动设置

手动设置,需要设置为有意义的值
在这里插入图片描述

和数据没有挂钩,只是手动设置,注意这部分不属于映射,因此在aes外面

ggplot(data = iris) + geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length), color = "blue")
ggplot(data = iris) + geom_point(mapping = aes(x = Sepal.Length, y = Petal.Length), size = 5,     # 点的大小5mmalpha = 0.5,  # 透明度 50%shape = 8)  # 点的形状,24个数字代表24个形状
2.映射:按照数据框的某一列来定义图的某个属性
ggplot(data = iris)+geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species))

根据Species分配颜色,注意要放到aes的括号里面去,表示映射,R包可以默认颜色
在这里插入图片描述

3.映射 vs 手动设置

在这里插入图片描述

映射:根据数据的某一列的内容分配为颜色
手动设置:把图形设置为一个或n个颜色,与数据内容无关

4.能不能自行指定映射的具体颜色?

color=颜色依据+(加号不要漏掉)scale_color_manual(values = c(“blue”,“grey”,“red”))
在这里插入图片描述

ggplot(data = iris)+geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species))+scale_color_manual(values = c("blue","grey","red"))

在这里插入图片描述

同理可得color可以换成别的属性,如shape,还可以用配色R包,如RColorBrewer,这个函数是可以直接+进ggplot的,其他的配色R包例如ggsci、paletteer
添加链接描述

#例如使用RColorBrewer R包,被加到了ggplot2里边,直接可用的颜色,scale_color_brewer()ggplot(data = iris)+geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species))+scale_color_brewer(palette = "Set1")

在这里插入图片描述

https://cloud.tencent.com/developer/article/1839444
#也可使用最强悍的配色R包paletteer
load("test.Rdata")
library(ggplot2)
library(paletteer)
ggplot(data = test)+geom_point(mapping = aes(x = a,y = b,color = change))+scale_color_paletteer_d(`"ButterflyColors::parides_zacynthus_polymetus"`)

在这里插入图片描述

#改大小
ggplot(data = test)+geom_point(mapping = aes(x = a,y = b,color = change),size = 5)+scale_color_paletteer_d(`"ButterflyColors::parides_zacynthus_polymetus"`)

在这里插入图片描述

在这里插入图片描述

5.区分color和fill两个属性
1.空心形状和实心形状都用color设置颜色
ggplot(data = iris)+geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species),shape = 17) #17号,实心的例子

在这里插入图片描述

ggplot(data = iris)+geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species),shape = 2) #2号,空心的例子

加粗样式

2.既有边框又有内心的,才需要color和fill两个参数
ggplot(data = iris)+geom_point(mapping = aes(x = Sepal.Length,y = Petal.Length,color = Species),shape = 24,fill = "black") #24号,双色的例子

在这里插入图片描述

4.拼图

par里的mfrow
grid.arrage
cowplot
patchwork比较常用

5.导出

经典三段论
ggsave
eoffice-topptx

四、练习1(5_exercise.R)

1.加载test.Rdata,分别test的以a和b列作为横纵坐标,change列映射颜色,画点图。

load("test.Rdata")
library(ggplot2)ggplot(data = test)+geom_point(mapping = aes(x = a,y = b,color = change))

在这里插入图片描述

2.尝试修改点的颜色为暗绿色(darkgreen)、灰色、红色

ggplot(data = test)+geom_point(mapping = aes(x = a,y = b,color = change))+scale_color_manual(values = c("blue","grey","red"))

在这里插入图片描述

抽奖函数:
> sample(1:12,3)
[1] 11  2 10
#c实现首尾相连
paste0("挖掘", 1:14)
paste0("入门", 1:12)
c(paste0("挖掘", 1:14),paste0("入门", 1:12))
#抽奖
> a = c(paste0("挖掘", 1:14),paste0("入门", 1:12))
> sample(a,1)
[1] "挖掘8"
#抽奖作弊,使用set.seed
a = c(paste0("挖掘", 1:14),paste0("入门", 1:12))
set.seed(10)
sample(a,1)

练习2

在这里插入图片描述
自己的答案:
1.

library(ggplot2)
p = ggplot(iris, aes(x=Species, y=Sepal.Width)) + geom_boxplot()
p

在这里插入图片描述
2.

#添加颜色
p5 = ggplot(iris, aes(x=Species, y=Sepal.Width,fill =Species)) +geom_boxplot()
p5

在这里插入图片描述
3.

#加点
p5 = ggplot(iris, aes(x=Species, y=Sepal.Width,fill =Species)) +geom_jitter(shape=16, position = position_jitter(0.2)) +geom_boxplot()
p5

在这里插入图片描述
正确答案:

ggplot(data = iris,mapping = aes(x = Species, y = Sepal.Width,fill = Species)) + geom_boxplot()
ggplot(data = iris,mapping = aes(x = Species, y = Sepal.Width,fill = Species)) + geom_boxplot()+geom_point()#这样相同的点就不能分开

在这里插入图片描述

p5 = ggplot(iris, aes(x=Species, y=Sepal.Width,fill =Species)) +geom_jitter() +geom_boxplot()
p5

在这里插入图片描述

p5 = ggplot(iris, mapping =aes(x=Species, y=Sepal.Width,fill =Species)) +geom_boxplot() +geom_jitter() p5

在这里插入图片描述

p5 = ggplot(iris, mapping =aes(x=Species, y=Sepal.Width,fill =Species)) +geom_jitter() + geom_boxplot() p5

在这里插入图片描述

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

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

相关文章

图搜索算法-最小生成树问题-克鲁斯卡尔算法(kruskal)

相关文章&#xff1a; 数据结构–图的概念 图搜索算法 - 深度优先搜索法&#xff08;DFS&#xff09; 图搜索算法 - 广度优先搜索法&#xff08;BFS&#xff09; 图搜索算法 - 拓扑排序 图搜索算法-最短路径算法-戴克斯特拉算法 图搜索算法-最短路径算法-贝尔曼-福特算法 最小生…

【Redis】数据类型

Redis数据类型&#xff08;5 3 1&#xff09; 五种基本数据类型 String字符串 特点 二进制安全&#xff0c;可以包含任何数据&#xff0c;如数字&#xff0c;字符串&#xff0c;jpg图片或者序列化的对象 应用场景 缓存&#xff1a; redis作为缓存层&#xff0c;mysql做持…

【ORACLE战报】2024.4月最新OCP考试喜报.

课程介绍 DBA数据库管理必备认证&#xff1a;ORACLE OCP 19C 教材下载 ORACLE OCP 19C 官方电子教材 ORACLE OCP 12C官方电子教材 题库下载 ORACLE 19C题库 &#xff08;083384题、082362题&#xff09;-2024答案修正版.rar 所有的收获都是默默耕耘的成果 2024.4月【最新考试成…

Chromium 调试指南2024 Windows11篇-条件断点、函数断点(十一)

1. 前言 在调试过程中&#xff0c;步进代码和条件断点/函数断点是非常有用的工具和技术&#xff0c;它们可以帮助开发者更加精确地定位和解决问题。本文将介绍步进代码的常用工具以及条件断点/函数断点的设置方法&#xff0c;帮助开发者更加高效地进行调试工作。 2. 步进代码…

ControlNet原理解析

前排提示照片已经获得小姐姐许可。 光知道ControlNet好用&#xff0c;不想知道它背后的原理么&#xff1f;今天就看一看这篇论文&#xff0c;带大家了解一下ControlNet是如何炼成的。 ControlNet是干嘛的 我们知道现在文本到图像生成很火爆&#xff0c;你只需要输入文字就可以…

内存函数:memcpy(拷贝),memmove(拷贝),memcmp(比较),memset(设置)

内存函数 一.memcpy&#xff08;内存拷贝1&#xff09;1.函数使用2.模拟实现 二.memmove&#xff08;内存拷贝2&#xff09;1.函数使用2.模拟实现 三.memcmp&#xff08;内存比较&#xff09;1.函数使用2.模拟实现 四.memset&#xff08;内存设置&#xff09;1.函数使用2.模拟实…

【Linux】用户组、用户、文件权限(ugo权限),权限掩码,chmod,chown,suid,sgid,sticky,su,sudo

用户组 注意&#xff1a;普通用户只能查看有哪些组&#xff0c;不能创建/修改/删除&#xff0c;会提示&#xff1a;用户名 is not in the sudoers file.This incident will be reported. groupadd 用户组名新建用户组cat /etc/group查看有哪些组&#xff08;普通用户可以操作…

Windows下配置TortoiseGit 访问Ubuntu虚拟机下Samba共享目录

前言&#xff1a; 本文记录学习使用 Git 版本管理工具的学习笔记&#xff0c;通过阅读参考链接中的博文和实际操作&#xff0c;快速的上手使用 Git 工具。 本文参考了引用链接博文里的内容。 引用: 【TortoiseGit】TortoiseGit安装和配置详细说明-CSDN博客 Git版本管理可视…

Java——对象的打印

当我们运行如下代码&#xff1a; public class Person {String name;String gender;int age;public Person(String name,String gender,int age){this.name name;this.gender gender;this.age age;}public static void main(String[] args){Person person new Person(&quo…

QT客户端开发的注意事项

QT客户端开发是一个涉及图形用户界面&#xff08;GUI&#xff09;设计、网络编程、数据库交互等多个方面的复杂过程。以下是在进行QT客户端开发时应注意的一些关键事项&#xff0c;通过关注这些事项&#xff0c;可以提高QT客户端应用的质量和开发效率。北京木奇移动技术有限公司…

Eclipse下载安装教程(包含JDK安装)【保姆级教学】【2024.4已更新】

目录 文章最后附下载链接 第一步&#xff1a;下载Eclipse&#xff0c;并安装 第二步&#xff1a;下载JDK&#xff0c;并安装 第三步&#xff1a;Java运行环境配置 安装Eclipse必须同时安装JDK &#xff01;&#xff01;&#xff01; 文章最后附下载链接 第一步&#xf…

微软推出的Microsoft Fabric 到底是什么?

近期&#xff0c;总有客户问小编&#xff0c;微软推出的 Microsoft Fabric 是什么&#xff1f;这个产品有什么特别之处呢&#xff1f;希望下面这篇文章能为大家解开一些疑惑。 微软Fabric是2023年5月推出的一个数据分析平台&#xff0c;它将关键数据管理和分析工作负载整合到一…

【设计模式】JAVA Design Patterns——Acyclic Visitor(非循环访问者模式)

&#x1f50d;目的 允许将新功能添加到现有的类层次结构中&#xff0c;而不会影响这些层次结构&#xff0c;也不会有四人帮访客模式中那样循环依赖的问题。 &#x1f50d;解释 真实世界例子 我们有一个调制解调器类的层次结构。 需要使用基于过滤条件的外部算法&#xff08;是…

奖金+1 万,OpenTenBase 开源核心贡献挑战赛,KB 专家助力其跑在 K8s 上

OpenTenBase 是由开放原子开源基金会孵化及运营的开源项目&#xff0c;是一款开放中立的企业级分布式 HTAP 开源数据库。OpenTenBase 具备高扩展性、商业数据库语法兼容、分布式 HTAP 引擎、多级容灾和多维度资源隔离等能力&#xff0c;已成功应用于金融、医疗、航天等行业的核…

FlyFlow:支持驳回后自动跨节点跳回

本周更新 新增&#xff1a;审批节点驳回&#xff08;拒绝配置的驳回&#xff09;支持自动跳回当前节点新增&#xff1a;修改数据节点新增&#xff1a;删除数据节点新增&#xff1a;子流程支持配置自动跳过发起人节点优化&#xff1a;两个项目合并一个单体项目优化&#xff1a;…

【C语言】水仙花数

问题 水仙花数&#xff08;Narcissistic number&#xff09;也被称为超完全数字不变数&#xff08;pluperfect digital invariant, PPDI&#xff09;、自恋数、自幂数或阿姆斯壮数数&#xff08;Armstrong number&#xff09;。 它是指一个n位数&#xff08;n≥3&#xff09;…

【C++】---继承

【C】---继承 一、继承的概念及定义1、继承的概念2、定义语法格式3、继承基类成员访问方式的变化 二、基类 和 派生类 的对象之间的赋值转换1、赋值规则2、切片&#xff08;1&#xff09;子类对象 赋值 给 父类对象&#xff08;2&#xff09;子类对象 赋值 给 父类指针&#xf…

Python邮件处理库之flanker使用详解

概要 Flanker是一个开源的邮件处理库,专门设计用于解析、验证和构建电子邮件地址和MIME消息。由Mailgun开发,它旨在提高邮件处理的效率和准确性,尤其适用于需要高效邮件验证和解析的应用程序。 安装 安装Flanker非常简单,可以通过Python的包管理器pip进行安装: pip ins…

信息流中的混排与流控

待完成. 一. 背景 问题特点: 无法事先拿到所有请求, 离线统一求解. 因此叫 online-matching.应用于在线服务, 求解rt不能高于50ms 二. CIKM 22’, 阿里广告动态定坑 见参考[1]. 2.1 问题建模,动态背包 略, 详见论文 2.2 求解, pidbeam search 思考: beam search 有用的…