prefix, surfix操作符重载

本文介绍C++标准对于前置和后置++/--运算符重载的规定:前置版本不带参数,而后置版本需要一个int类型的参数。通过Integer类示例展示了如何实现这两种重载方式。
C++标准规定:当为一个类型重载++, --的前置版本时,不需要参数;当为一个类型重载++, --的后置版本时,需要一个int类型的参数作为标志。
可参考<The design and Evolution of C++>
  1. class Integer{
  2.   long m_data;
  3. public:
  4.   Integer(long data): m_data(data){}
  5.   Integer& operator++(){
  6.     cout << "Integer::operator++() called" << endl;
  7.     m_data++;
  8.     return *this;
  9.   }
  10.   Interger operator++(int){
  11.     cout << "Integer::operator++(int) called" << endl;
  12.     Integer tmp = *this;
  13.     m_data++;
  14.     return tmp;
  15.   }
  16. };

我有:GX80sample.usedType.vcf,里面是群体call snp后的结果,包含GR2和JMD列是亲本的数据,JG87列是需要删除的数据,即总共2个亲本和77个子代数据;用亲本加入的数据出一个流程代码;用纯77个子代的数据出一个全流程代码;且生成77_重叠结果gene_search_results.csv文件中“TraitID TraitName Chromosome Search_Start Search_End Gene_ID pro gene converge Gene_Name Gene_Start Gene_End Strand 1 GX202209 Chr14 71193064 71527719 CSS0025418 #N/A #N/A #N/A NA 71381784 71407373 + 1 GX202209 Chr14 71193064 71527719 CSS0049907 #N/A #N/A #N/A NA 71527689 71532164 - 1 GX202209 Chr14 71193064 71527719 CSS0049797 #N/A #N/A #N/A NA 71226001 71230505 - 1 GX202209 Chr14 71193064 71527719 CSS0005917 #N/A #N/A #N/A NA 71191313 71193965 + 1 GX202209 Chr14 71193064 71527719 CSS0010091 #N/A #N/A #N/A NA 71196706 71201672 - 1 GX202209 Chr14 71193064 71527719 CSS0037246 #N/A #N/A #N/A NA 71477796 71479931 + 1 GX202209 Chr14 71193064 71527719 CSS0028351 #N/A #N/A #N/A NA 71222015 71225696 + 等等”所有基因的单倍型作图,分开批量做图。用R生成有亲本和无亲本的完整代码;此外traits.xlsx中有77个子代群体的4次表型数据(没有表头)“GX202209 64.15 38.9 NA 68.36 51.02 71.5 48.1 66.76 55.28 52.43 65.68 33.3 52.58 61.58 19.5 69.44 57.44 58.58 64.86 37.15 69.67 37.86 79.92 45.64 43.55 57.82 72.56 53.37 53.14 65.05 58.84 83.15 78.38 56.63 52.35 65.84 57.89 77.42 73.59 55.05 56.39 73.82 71.3 32.55 66.64 52.01 71.06 69.96 40.73 62.66 57.3 23.25 35.4 52.37 79 66.73 73.55 54.69 57.97 72.39 59.46 19.21 72.44 64.89 81.83 74.35 55.14 78.7 71.02 61.54 80.04 59.58 75.47 NA 48 NA GX202404 69.78 20.49 37.95 NA 43.22 80.45 79.64 80.5 73.47 75.17 81.19 NA 47.76 75.59 NA 78.46 81.07 20.23 76.21 20.76 80.67 71.48 76.7 33.45 56.58 62.47 63.7 68.83 66.35 72.99 58.2 83.28 79.26 71.05 34.49 NA 16.03 85.97 73.18 79.26 48.15 70.19 77.79 70.09 75.21 61.02 70.16 77.1 68.64 77.14 69.2 29.69 68.79 63.8 NA 77.44 25.85 59.21 49.97 62.47 22.55 45.39 80.32 78.63 82.1 46.05 51.73 30.93 78 75.82 28.34 31.96 74.87 63.07 NA 31.27 GX202409 25.32 16.93 24.11 NA 32.98 28.85 22.57 40.3 18.11 15.25 22.66 12.73 16.51 20.73 NA 19.15 24.4 29.57 25.17 NA 27.43 14.8 28.89 21.48 15.91 17.81 17.06 20.98 20.32 27.92 19.54 31.36 26.83 18.22 24.69 NA 21.3 24.06 24.42 18.2 15.39 23.04 20.91 17.84 18.02 17.68 28.47 24.81 24.77 19.81 19.82 NA 13.18 14.32 NA 25.31 26.32 18.33 18.33 21.88 20.39 9.41 27.79 29.21 35.02 NA 22.09 25.37 24.66 19.46 NA 22.98 NA 26.08 NA 15.92 GX202504 40.09 31 30.49 NA 44.35 43.47 40.34 39.24 NA 20.28 40.97 30.13 32.55 30.03 NA 41.24 47.83 44.29 36.19 NA 36.81 30.46 36.9 23.93 62.3 42.97 41.73 31.06 34.5 38.69 36.88 41.39 43.52 35.76 36.58 NA NA 48.75 39.37 37.49 NA 42.54 41.27 40.16 37.48 21.62 38.67 31.92 29.6 31.03 46.84 NA 31.27 20.4 NA 25.77 34.03 42.61 32.06 23.28 29.77 13.75 40.6 37.36 36.89 55.87 26.59 29.3 39.79 27.3 24.72 26.58 42.99 43.74 NA 25.2 ”;参考代码:一、geneHap包简介 1、geneHap的工作流程 如下图所示,可以看到,用户需要准备的包括:基因型文件、注释文件和样本信息文件,以及后续会用的表型文件。输出的主要内容有:变异位点的可视化、单倍型网络、地理分布、表型比较和连锁不平衡热图。 geneHapR的工作流程 2、geneHapR的安装 打开R或Rstudio,输入以下代码进行安装: library(BiocManager) BiocManager::install(c("Biostrings", "GenomicRanges", "muscle", "IRanges", "rtracklayer", "trackViewer")) install.packages("geneHapR") library(geneHapR) 二、输入文件的设置 需事先查询好目的基因的物理位置信息,使用bcftools工具提取目的基因的vcf变异信息文件,代码如下: #bcftools将vcf生成bgzip和index格式 bcftools view my.vcf -Oz -o my.vcf.b.gz bcftools index my.vcf.b.gz #提取基因的vcf文件 bcftools filter my.vcf.b.gz --regions chr1:3478748-3480748 > mygene.vcf 在R中读取该文件: vcf <- import_vcf("mygene.vcf") 单纯地进行基因的单倍型分析(即获取基因的不同单倍型分类情况),只需基因的vcf文件! 三、进行单倍型分析 R或Rstudio,输入以下代码: library(geneHapR) setwd("D:/Working-Folder/R-work/geneHapR/") vcf <- import_vcf("mygene.vcf") geneID <- "mygene" # 基因ID Chr <- "num" # 基因所处的染色体名称 start <- start # 基因的起始位置(染色体坐标) end <- end # 基因的终止位置(染色体坐标) hapPrefix <- "Hap" # 单倍型名称的前缀 # 从VCF开始单倍型鉴定 hapResult <- vcf2hap(vcf, hapPrefix = hapPrefix, hetero_remove = TRUE, # 移除包含杂合位点的样本 na_drop = TRUE) # 移除包含基因型缺失的样本 # 对单倍型结果进行汇总整理 hapSummary <- hap_summary(hapResult, hapPrefix = hapPrefix) # 将单倍型鉴定结果保存到硬盘 write.hap(hapResult, file = "mygene.hapResult") write.hap(hapSummary, file = "mygene.hapSummary") # 导入之前的单倍型分析结果 hapResult <- import_hap(file = "mygene.hapResult") hapSummary <- import_hap(file = "mygene.hapSummary") # 以表格形式展示各单倍型的基因型 plotHapTable(hapSummary, # 单倍型结果 hapPrefix = hapPrefix, # 单倍型名称前缀 angle = 45, # 物理位置的角度 displayIndelSize = 0, # 图中展示最大的Indel大小 title = geneID) # 图片标题 运行结束后,会产生一个表格型图片,显示该基因的单倍型信息。 可以看到,该基因有6种单倍型,最后面一列是每种单倍型对应的样本数目。 四、优异单倍型挖掘 获取单倍型及对应的样本信息后,再结合对应的表型,进行多重比较,即可获知哪一种单倍型的表型最好。此过程可在Excel活GraphPad Prism等软件进行,过程较为简单,在此不再演示。 五、参考信息 geneHapR做基因单倍型分析-优快云博客https://blog.youkuaiyun.com/zhang_rl/article/details/130831155 GitHub - ZhangRenL/geneHapRContribute to ZhangRenL/geneHapR development by creating an account on GitHub.https://github.com/ZhangRenL/geneHapRgeneHapR: an R package for gene haplotypic statistics and visualization | BMC Bioinformatics | Full Text (biomedcentral.com)https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-023-05318-9 后记 以上是简单使用geneHapR包进行单倍型分析的操作,后续讲述该包的其它功能(基因结构、LD分析、单倍型网络和地理分布等)。 --------2024.4.12 --------CXGG;和四、单倍型需要什么工具? 什么,都2302年了,您还在用Excel分析单倍型呢??! 在这里向推荐大家使用geneHapR。这款软件完美地支持从fasta序列以及vcf、p.link、HapMap等格式的二代测序结果进行单倍型鉴定。 软件安装:由于这款软件是基于R语言开发的,所以需要首先安装R和RStudio两款软件(注意一定要先安装R再安装RStudio)。 最新版R下载链接:https://cloud.r-project.org/bin/windows/base/。 最新版RStudio下载链接:https://posit.co/download/rstudio-desktop/。 都安装完成后,打开RStudio,输入如下命令。 # 先安装一些依赖的BiocManager的包,否则后续安装geneHapR容易出错 install.packages("BiocManager") BiocManager::install(c("Biostrings", "GenomicRanges", "muscle", "IRanges", "rtracklayer", "trackViewer")) # 安装geneHapR install.packages("geneHapR") 运行项目并下载源码 R 运行 如果安装过程遇到错误了。请不要灰心,不要放弃,命运总是坎坷的,相信阳光总在风雨后!请先安装缺失的软件包,等完成后再尝试运行install.packages("geneHapR")安装geneHapR。 如果看到程序包‘geneHapR’打开成功,MD5和检查也通过,恭喜你可以使用geneHapR进行单倍型分析了!!! 五、工具装好了,该怎么操作呢? 4.0 测试数据准备 将下列4个文件下载下来并存放到工作目录中,后续分析会用到 基因型数据:Genotype_example 注释信息:Annotation_example 表型数据:Phenotype_example 其他相关数据:AccINFO_example 5.1 RStudio代码 如果有一定的R语言基础,推荐您使用这种方式。 1) 从数据导入到单倍型鉴定 # 首先把软件加载进来 library(geneHapR) # 设置工作目录(windows的同学注意"\"和"/"的问题) setwd("D:/Haplotype") # 导入各种数据 gff <- import_gff("gff/OsGHD7.gff3") # 导入GFF格式的注释数据 gff <- import_bed("12859_2023_5318_MOESM3_ESM.bed6") # 导入BED格式的注释数据 pheno <- import_AccINFO("12859_2023_5318_MOESM4_ESM.tsv") # 导入表型数据 AccINFO <- import_AccINFO("12859_2023_5318_MOESM5_ESM.csv", sep = ",", # 分隔符号,默认为制表符"\t" na.strings = "NA") # 导入其他样本信息 # 导入VCF格式的基因型数据及变异信息的筛选 vcf <- import_vcf("OsGHD7.vcf.gz") vcf <- filter_vcf(vcf, gff, mode = "both", # both, POS, Type的其中一个 start = start, end = end, Chr = Chr, # 保留哪些位置的变异信息 type = "CDS", cusTyp = c("CDS")) # 保留哪些类型的变异信息 # 导入表格形式的基因型数据 tbl <- read.csv("12859_2023_5318_MOESM2_ESM.geno") # 导入其他格式的基因型数据请查看帮助 # 这里就不再一一展示了 help("geneHapR") library(help = 'geneHapR') browseVignettes('geneHapR') # 一些基本参数的设置 geneID <- "OsGHD7" # 基因ID Chr <- "Chr7" # 基因所处的染色体名称 start <- 9152403 # 基因的起始位置(染色体坐标) end <- 9155185 # 基因的终止位置(染色体坐标) hapPrefix <- "H" # 单倍型名称的前缀 # 常用格式的单倍型鉴定,具体参数请查看帮助文档 # VCF: vcf2hap() # P.link(ped&map): plink.pedmap2hap() # Fasta: seqs2hap() # HapMap: hmp2hap() # Table: table2hap() # 从VCF开始单倍型鉴定 hapResult <- vcf2hap(vcf, hapPrefix = hapPrefix, hetero_remove = TRUE, # 移除包含杂合位点的样本 na_drop = TRUE) # 移除包含基因型缺失的样本 # 从表格形式的基因型数据开始单倍型分析 hapResult <- table2hap(vcf, hapPrefix = hapPrefix, hetero_remove = TRUE, # 移除包含杂合位点的样本 na_drop = TRUE) # 移除包含基因型缺失的样本 # 对单倍型结果进行汇总整理 hapSummary <- hap_summary(hapResult, hapPrefix = hapPrefix) # 将单倍型鉴定结果保存到硬盘 write.hap(hapResult, file = "GeneID.hapResult") write.hap(hapSummary, file = "GeneID.hapSummary") # 导入之前的单倍型分析结果 hapResult <- import_hap(file = "GeneID.hapResult") hapSummary <- import_hap(file = "GeneID.hapSummary") 运行项目并下载源码 R 运行 2)单倍型结果展示 # 单倍型结果可视化分析 # 以表格形式展示各单倍型的基因型 plotHapTable(hapSummary, # 单倍型结果 hapPrefix = hapPrefix, # 单倍型名称前缀 angle = 45, # 物理位置的角度 displayIndelSize = 0, # 图中展示最大的Indel大小 title = geneID) # 图片标题 # 在表格中添加注释信息 plotHapTable(hapSummary, # 单倍型结果 hapPrefix = hapPrefix, # 单倍型名称前缀 angle = 45, # 物理位置的角度 displayIndelSize = 4, # 图中展示最大的Indel大小 title = geneID, # 图片标题 INFO_tag = "ANN", tag_field = 11, geneName = geneID) # 添加的注释信息 运行项目并下载源码 R 运行 3) 变异位点都在哪里 # 在基因模式图上展示变异位点的信息 displayVarOnGeneModel(gff = gff, hapSummary = hapSummary, startPOS = start-10, endPOS = end+10, CDS_h = 0.05, fiveUTR_h = 0.25, threeUTR_h = 0.25, # gene model parameters cex = 0.8) # size of variants 运行项目并下载源码 R 运行 4) 单倍型网络分析 # 单倍型网络分析 hapSummary[hapSummary == "DEL"] = "N" hapnet <- get_hapNet(hapSummary, # 单倍型结果 AccINFO = AccINFO, # 包含样本分类信息的数据框(data.frame) groupName = "Subpopulation", # 含有样本分类信息的列名称 na.label = "Unknown") # 未知分类样本的类别 plotHapNet(hapnet, # 单倍型网络 scale = "log2", # 标准化方法"log10"或"log2"或"none" show.mutation = 2, # 是否展示变异位点数量, 0,1,2,3 col.link = 2, link.width = 2, # 单倍型之间连线的颜色和宽度 main = geneID, # 主标题 pie.lim = c(0.5, 2), # 圆圈的大小 legend_version = 1, # 图例形式(0或1) labels = T, # 是否在单倍型上添加label # legend = FALSE) # 不添加图例 # legend = TRUE) # 添加图例,但需要单击添加的位置 legend = c(12,0), # 图例的坐标 cex.legend = 0.6) # 图例中文字的大小 运行项目并下载源码 R 运行 5) 单倍型的地理分布 # 地理分布 AccINFO$Longitude <- as.numeric(AccINFO$Longitude) AccINFO$Latitude <- as.numeric(AccINFO$Latitude) hapDistribution(hapResult, # 单倍型结果 AccINFO = AccINFO, # 含有地理坐标的数据框(data.frame) hapNames = c("H001", "H002", "H003"), # 展示的单倍型名称建议不超过3个 symbol.lim = c(3, 6), # 圆圈的大小 LON.col = "Longitude", # 经纬度所处的列名称 LAT.col = "Latitude", # 经纬度所处的列名称 legend = "bottomleft", # 图例所处的位置 cex.legend = 1, # 图例大小 lwd.pie = 0.2, # 圆圈线条的粗细 lwd = 1.5, # 地图线条的粗细 main = geneID) # 主标题 运行项目并下载源码 R 运行 6) 连锁不平衡分析 # 连锁不平衡分析 plot_LDheatmap(hap = hapResult, # 单倍型结果 add.map = TRUE, # 是否添加基因模式图 gff = gff, # 注释信息 Chr = Chr, # 染色体名称 start = start, # 基因的起始位置 end = end) # 基因的终止位置(更多参数参见帮助文档) 运行项目并下载源码 R 运行 7)表型关联分析 # 表型关联分析 # 单个表型的分析 hapVsPheno(hap = hapResult, # 单倍型分析结果 pheno = pheno, # 表型 hapPrefix = hapPrefix, # 单倍型名称的前缀 title = geneID, # 主标题 minAcc = 4, # 参与p值计算所需的最小样本数 symnum.args = list( # 定义显著性标注方式 cutpoints = c(0, 0.001, 0.01, 0.05, 1), symbols = c("***", "**", "*", "ns")), mergeFigs = TRUE) # 结果包括两个图,是否融合成一张图 # 多个表型的分析 hapVsPhenos(hap = hapResult, pheno = pheno, hapPrefix = hapPrefix, title = geneID, compression = "lzw", # tiff文件的压缩方式 res = 300, width = 12, height = 12, # 图片大小的单位"inch" outPutSingleFile = TRUE, # 只有pdf格式支持输出单个文件 filename.surfix = "pdf", # 文件格式: pdf, png, jpg, tiff, bmp filename.prefix = geneID) # 文件名称为: prefix + pheno_name + surfix 运行项目并下载源码 R 运行 8)变异位点的效应估算 # 位点效应估算(结果仅供参考) # EFF <- siteEFF(hapResult, pheno) # plotEFF(EFF, gff = gff, # Chr = Chr, start = start, end = end, # showType = c("five_prime_UTR", "CDS", "three_prime_UTR"), # see help(plotEFF) # y = "effect", # the means of y axis, one of effect or pvalue # ylab = "effect", # label of y axis # cex = 0.5, # Cex # legend.cex = 0.8, # legend size # main = geneID, # main title # CDS.height = 1, # controls the height of CDS, heights of others will be half of that # markMutants = TRUE, # mark mutants by short lines # mutants.col = 1, mutants.type = 1, # parameters for appearance of mutants # pch = 20) # points type 运行项目并下载源码 R 运行 或者逐个位点进行比较分析 # 逐位点比较变异效应 hapVsPhenoPerSite(hap = hapResult, # 单倍型分析结果 pheno = pheno, # 表型文件 phenoName = names(pheno)[10], # 表型名称 freq.min = 5) # 参与显著性计算的最小样本数 # 回车继续下一位点 # ESC退出当前命令 运行项目并下载源码 R 运行 9) 什么?你的VCF文件太大,导不进来??? 给你个小提示 filterLargeVCF() filterLargeP.link() 参考: 转至:https://blog.youkuaiyun.com/zhang_rl/article/details/130831155
最新发布
12-30
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值