当前位置: 首页 > news >正文

【R包】pathlinkR转录组数据分析和可视化利器

在这里插入图片描述

介绍

通常情况下,基因表达研究如微阵列和RNA-Seq会产生数百到数千个差异表达基因(deg)。理解如此庞大的数据集的生物学意义变得非常困难,尤其是在分析多个条件和比较的情况下。该软件包利用途径富集和蛋白-蛋白相互作用网络,促进了差异基因表达结果的可视化和下游分析,帮助研究人员从基因表达研究中发现潜在的生物学和病理生理学。

我们在这个包中包含了一个基因表达结果的示例数据集,作为对象“exampleDESeqResults”。这是一个由2个数据帧组成的列表,使用包中的‘ results() ’函数生成BiocStyle::Biocpkg(“DESeq2”)’ (Love et al. 2014)。数据来自一项RNA-Seq研究,该研究调查了入院时(T1)的COVID-19和非COVID-19败血症患者与大约1周后(T2)在ICU的情况,并随时间索引(即T2 vs T1) (an et al. 2023)。

安装

安装该R包

# We'll also be using some functions from dplyr
# BiocManager::install("pathlinkR", version="devel")
library(dplyr)
library(pathlinkR)

基因表达火山图

在基因表达研究中,通常首先进行的可视化分析之一是识别差异表达基因(DEGs)的数量。这些基因通常是通过设定特定的倍数变化和统计显著性阈值来定义的。调整后的p值小于0.05和绝对倍数变化大于1.5被用作默认阈值,尽管可以指定任何值。pathlinkR 包含了一个名为 eruption() 的函数,用于创建火山图。

data("exampleDESeqResults")eruption(rnaseqResult=exampleDESeqResults[[1]],title=names(exampleDESeqResults[1])
)

在这里插入图片描述

对于定制火山图,有多种选项可供选择,包括:

  • 调整阈值
  • 切换显著基因和非显著基因的颜色
  • 改变标记基因的数量
  • 调整x轴和y轴的范围
  • 绘制对数2(log2)或非对数2的倍数变化(以更好地感知变化幅度)
  • 突出显示特定感兴趣的基因集
data("sigoraDatabase")
interferonGenes <- sigoraDatabase %>% filter(pathwayName == "Interferon Signaling") %>% pull(ensemblGeneId)eruption(rnaseqResult=exampleDESeqResults[[1]],title=names(exampleDESeqResults[1]),highlightGenes=interferonGenes,highlightName="Interferon genes (red)",label="highlight",nonlog2=TRUE,n=10
)

在这里插入图片描述

可视化比较中的倍数变化

除了创建火山图外,我们还可以通过热图来可视化特定通路(例如通过pathwayEnrichment()识别为显著的通路)中涉及的差异表达基因(DEGs)。plotFoldChange()函数通过接收DESeq2::results()数据框的输入列表(与pathwayEnrichment()类似),并为组成基因的倍数变化创建热图来实现这一点。

plotFoldChange(inputList=exampleDESeqResults,pathName="Interferon alpha/beta signaling"
)

在这里插入图片描述

为了定制化,提供了多种选项,包括:

  • 缩短每次比较的名称
  • 提供一个自定义的基因列表进行可视化,并添加一个信息性的标题
  • 在热图单元格中使用对数2倍数变化
  • 交换默认的行和列,并在行(比较)之间添加分隔
exampleDESeqResultsRenamed <- setNames(exampleDESeqResults,c("Pos", "Neg")
)plotFoldChange(exampleDESeqResultsRenamed,manualTitle="Signature genes",genesToPlot=c("CD4", "CD8A","CD8B", "CD28", "ZAP70"),geneFormat="hgnc",colSplit=c("Pos", "Neg"),log2FoldChange=TRUE,colAngle=45,clusterRows=FALSE,clusterColumns=TRUE,invert=TRUE
)

在这里插入图片描述

构建和可视化蛋白质-蛋白质相互作用网络

pathlinkR 包含用于构建和可视化蛋白质-蛋白质相互作用(PPI)网络的工具。在这里,我们利用从 InnateDB 收集的 PPI 数据,生成在基因表达分析中识别的差异表达基因(DEGs)之间的相互作用列表。这些相互作用随后可以在 R 中用于构建 PPI 网络,同时提供了多种选项来控制网络的类型,例如支持一级、最小或零级网络。实现这一目标的两个主要函数是 ppiBuildNetwork()ppiPlotNetwork()

让我们继续查看 COVID 阳性患者随时间变化的差异表达基因(DEGs),使用显著的 DEGs 来构建一个 PPI 网络。由于我们输入的数据框包含了所有测量的基因(而不仅仅是显著的基因),我们将使用 filterInput=TRUE 选项,以确保网络仅由通过标准阈值(如上所述)的基因构建。由于我们正在可视化 DEGs 的网络,让我们通过指定 fillType="foldChange" 来给节点上色,以指示它们失调的方向(即上调或下调)。

exNetwork <- ppiBuildNetwork(rnaseqResult=exampleDESeqResults[[1]],filterInput=TRUE,order="zero"
)ppiPlotNetwork(network=exNetwork,title=names(exampleDESeqResults)[1],fillColumn=LogFoldChange,fillType="foldChange",label=TRUE,labelColumn=hgncSymbol,legend=TRUE
)

在这里插入图片描述

带有蓝色标签的节点(例如STAT1、FBXO6、CDH1等)是网络中的枢纽节点,即那些具有高介数中心性得分的基因。用于确定枢纽节点的统计量可以在ppiBuildNetwork()函数中通过“hubMeasure”选项进行设置。

exNetworkInterferon <- mutate(exNetwork,isInterferon = if_else(name %in% interferonGenes, "y", "n")
)ppiPlotNetwork(network=exNetworkInterferon,title=names(exampleDESeqResults)[1],fillColumn=isInterferon,fillType="categorical",catFillColours=c("y"="red", "n"="grey"),label=TRUE,labelColumn=hgncSymbol,legend=TRUE,legendTitle="Interferon\ngenes"
)

在这里插入图片描述

富集网络和提取子网络

pathlinkR 包含两个用于进一步分析蛋白质-蛋白质相互作用(PPI)网络的函数。首先,ppiEnrichNetwork() 函数会使用网络的节点表来测试富集的 Reactome 通路或 Hallmark 基因集。

exNetworkPathways <- ppiEnrichNetwork(network=exNetwork,analysis="hallmark",filterResults="default",geneUniverse = rownames(exampleDESeqResults[[1]])
)exNetworkPathways

在这里插入图片描述

其次,ppiExtractSubnetwork() 函数可以从起始网络中提取一个最小连通的子网络,使用富集通路中的基因作为提取的“起始”节点。例如,下面我们将使用上述 Hallmark 富集的结果,从“干扰素γ反应”项中提取一个基因子网络,然后绘制这个缩减后的网络,并突出显示通路中的基因。

exSubnetwork <- ppiExtractSubnetwork(network=exNetwork,pathwayEnrichmentResult=exNetworkPathways,pathwayToExtract="INTERFERON GAMMA RESPONSE"
)ppiPlotNetwork(network=exSubnetwork,fillType="oneSided",fillColumn=degree,label=TRUE,labelColumn=hgncSymbol,legendTitle="Degree"
)

在这里插入图片描述

或者,您也可以使用ppiExtractSubnetwork()函数中的genesToExtract参数,提供您自己的基因集(一个包含Ensembl ID的字符向量)来提取为子网络。

进行通路富集分析

通路富集的核心概念是过度表达:也就是说,我们差异表达基因(DEG)列表中属于特定通路的基因数量是否比随机情况下预期的更多?为了计算这一点,最简单的方法是比较某个通路中的 DEGs 与所有 DEGs 的比例,以及数据库中所有通路中的基因与该通路中所有基因的比例。pathlinkR 主要使用 Reactome 数据库(Fabregat 等,2017)来实现这一目的。

过度表达分析可能出现的一个问题是,假设每个通路中的每个基因在属于该通路方面具有“相等”的价值。实际上,一种蛋白质可以具有多种(有时是非常不同的)功能,并且属于多个通路,例如蛋白激酶。还有一些通路与细胞机制有相当大的重叠,如 TLR 通路。这可能导致多个相似通路或甚至不相关的“假阳性”富集,使得解析结果变得非常困难。

一种解决方案是使用独特的基因对,正如 r BiocStyle::CRANpkg("sigora") 包的创建者所描述的(Foroushani 等,2013)。这种方法减少了由于多面性基因导致的相似和不相关通路的数量,更多地关注可能与基础生物学相关的通路。这种方法是 pathlinkRpathwayEnrichment() 函数的默认方法。

pathwayEnrichment() 函数的输入是一个数据框列表(每个来自 DESeq2::results()),默认情况下会将基因分为上调和下调两类,然后分别对每组进行通路富集分析。列表中数据框的名称应表明在 DESeq2 结果中进行的比较,因为它将用于识别结果。对于 analysis="sigora",我们还需要提供一个基因对签名库(gpsRepo),其中包含要测试的通路和基因对。将此参数保留为“默认”将使用 sigora 中的 reaH GPS 库,包含人类 Reactome 通路。或者,也可以提供自己的 GPS 库;有关如何制作的详细信息,请参阅 ??sigora::makeGPS()

## Note the structure of `exampleDESeqResults`: a named list of results from
## DESeq2
exampleDESeqResultsenrichedResultsSigora <- pathwayEnrichment(inputList=exampleDESeqResults,analysis="sigora",filterInput=TRUE,gpsRepo="default"
)head(enrichedResultsSigora)

在这里插入图片描述

对于那些仍然倾向于传统的过度表达分析的人,我们提供了通过设置analysis="reactome"来使用r BiocStyle::Biocpkg("ReactomePA")(Yu 等,2016)进行分析的选项。在使用这种方法时,我们建议提供一个基因全集,作为富集测试的背景;这里我们将使用 DESeq2 测试显著性的所有基因(即计数矩阵中的所有基因),在运行测试之前将它们转换为 Entrez 基因 ID。详情请参阅我们的 Github 页面 上的完整手册。

除了在设置analysis为“sigora”或“reactome”时使用的 Reactome 数据库外,我们还提供了使用 Molecular Signatures Database (MSigDb) 中的 Hallmark 基因集 进行过度表达分析。这些是 50 个基因集,代表“具有协调表达的特定、明确定义的生物学状态或过程”(Liberzon 等,2015)。与更细致的 Reactome 通路相比,这个数据库提供了关于关键生物学过程的更高级别的总结

enrichedResultsHm <- pathwayEnrichment(inputList=exampleDESeqResults,analysis="hallmark",filterInput=TRUE,split=TRUE
)head(enrichedResultsHm)

在这里插入图片描述

最后,用户在进行富集分析时也可以使用来自 KEGG 的数据。通过设置analysis="kegg",可以使用传统的过度表达分析;或者通过指定analysis="sigora"gpsRepo="kegH",可以使用基于基因对的方法。

绘制通路富集分析结果

现在我们已经得到了来自多个比较的大量通路富集分析结果,是时候将它们可视化了。plotPathways()函数通过将Reactome通路(或Hallmark基因集)分组到父组下,并指示每个通路在每个比较中是上调还是下调,从而帮助我们轻松识别哪些通路在不同的差异表达基因(DEG)列表中是共享的或独特的。由于通常会有许多通路,您可以将绘图分成多列(最多3列),并截断通路名称以使结果更容易展示。

有时,一个通路可能在同一个DEG列表中的上调和下调基因中都富集(这种情况通常发生在较大的通路中)。这种现象会用一个白色星号表示,其中显示更显著(调整后的p值更低)的方向。您还可以更改比较的角度/标签,或者在标签下方添加每个比较中的DEG数量。最后,您可以指定要包含在可视化的通路或顶级通路组。

pathwayPlots(pathwayEnrichmentResults=enrichedResultsSigora, columns=2
)

在这里插入图片描述

这些绘图也可以进行多种调整:

  • 基于顶级通路分组,仅显示与免疫相关的通路
  • 改变用于调整后p值的颜色缩放
  • 压缩比较名称以便更好地适应绘图,并使其水平显示
  • 在比较名称下方添加用于富集的DEGs数量
  • 增加通路名称的截断截止值,以便显示更多单词

从这些结果中,你可以看到,尽管许多免疫系统通路在COVID-19和非COVID-19脓毒症患者中随时间朝同一方向变化,但有一些独特的通路脱颖而出,大多与干扰素信号传导有关(“干扰素信号传导”、“干扰素γ信号传导”、“干扰素α/β信号传导”、“ISG15抗病毒机制”)。这可能反映了COVID-19患者早期抗病毒反应的增强,这种反应随时间减弱,而非COVID-19脓毒症患者则没有变化。

pathwayPlots(pathwayEnrichmentResults=enrichedResultsSigora,specificTopPathways="Immune System",colourValues=c("#440154", "#FDE725"),newGroupNames=c("COVID\nPositive", "COVID\nNegative"),showNumGenes=TRUE,xAngle="horizontal",nameWidth=50
)

在这里插入图片描述

从富集通路生成网络

pathlinkR 包含将基于 Reactome 的方法(“sigora”或“reactomepa”)的通路富集结果转换为网络的函数,通过计算分配给每个通路的基因的重叠来确定它们之间的相似性。在这些网络中,每个通路是一个节点,它们之间的连接或边是通过距离度量来确定的。可以设置一个阈值,当两个通路之间的相似性达到最小值时,它们被认为是相连的,并且会在它们的节点之间绘制一条边。

我们提供了一个预先计算好的 Reactome 通路距离矩阵,该矩阵是使用 Jaccard 距离生成的,但也支持使用多种距离度量。一旦创建了这个通路相互作用的“基础”,就可以使用 createPathnet() 函数构建通路网络:

data("sigoraDatabase")pathwayDistancesJaccard <- getPathwayDistances(pathwayData = sigoraDatabase)startingPathways <- pathnetFoundation(mat=pathwayDistancesJaccard,maxDistance=0.8
)# Get the enriched pathways from the "COVID Pos Over Time" comparison
exPathwayNetworkInput <- enrichedResultsSigora %>% filter(comparison == "COVID Pos Over Time")myPathwayNetwork <- pathnetCreate(pathwayEnrichmentResult=exPathwayNetworkInput,foundation=startingPathways
)

另一种可视化方法

pathnetGGraph(myPathwayNetwork,labelProp=0.1,nodeLabelSize=3,nodeLabelOverlaps=8,segColour="red",themeBaseSize = 12
)

在这里插入图片描述

填充的节点(通路)是富集的通路(即由pathwayEnrichment()输出的通路)。节点的大小与统计显著性相关,而边的厚度与两个相连通路的相似性有关。

pathnetVisNetwork(myPathwayNetwork)

在这里插入图片描述

仅使用差异表达基因(DEGs)生成通路网络

另一种选择是在生成通路网络信息时仅使用差异表达基因(DEGs),具体方法如下:

candidateData <- sigoraExamples %>%filter(comparison == "COVID Pos Over Time") %>% select(pathwayId, genes) %>%tidyr::separate_rows(genes, sep=";") %>%left_join(sigoraDatabase,by=c("pathwayId", "genes" = "hgncSymbol"),multiple="all") %>%relocate(pathwayId, ensemblGeneId, "hgncSymbol"=genes, pathwayName) %>%distinct()## Now that we have a smaller table in the same format as sigoraDatabase, we
## can construct our own matrix of pathway distances
candidateDistData <- getPathwayDistances(pathwayData=candidateData,distMethod="jaccard"
)candidateStartingPathways <- pathnetFoundation(mat=candidateDistData,maxDistance=0.9
)candidatesAsNetwork <- pathnetCreate(pathwayEnrichmentResult=filter(sigoraExamples, comparison == "COVID Pos Over Time"),foundation=candidateStartingPathways,trim=FALSE
)pathnetVisNetwork(candidatesAsNetwork, nodeLabelSize=30)

在这里插入图片描述

系统信息

R version 4.4.1 (2024-06-14)
Platform: x86_64-pc-linux-gnu
Running under: Ubuntu 22.04.5 LTSMatrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.10.0 
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0locale:[1] LC_CTYPE=en_CA.UTF-8       LC_NUMERIC=C              [3] LC_TIME=en_CA.UTF-8        LC_COLLATE=en_CA.UTF-8    [5] LC_MONETARY=en_CA.UTF-8    LC_MESSAGES=en_CA.UTF-8   [7] LC_PAPER=en_CA.UTF-8       LC_NAME=C                 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C       time zone: America/Vancouver
tzcode source: system (glibc)attached base packages:
[1] stats4    stats     graphics  grDevices utils     datasets  methods  
[8] base     other attached packages:[1] DESeq2_1.46.0               SummarizedExperiment_1.36.0[3] Biobase_2.66.0              MatrixGenerics_1.18.0      [5] matrixStats_1.4.1           GenomicRanges_1.58.0       [7] GenomeInfoDb_1.42.0         IRanges_2.40.0             [9] S4Vectors_0.44.0            BiocGenerics_0.52.0        
[11] pathlinkR_1.2.0             dplyr_1.1.4                
[13] BiocStyle_2.34.0           loaded via a namespace (and not attached):[1] RColorBrewer_1.1-3      rstudioapi_0.17.1       jsonlite_1.8.9         [4] shape_1.4.6.1           magrittr_2.0.3          ggtangle_0.0.4         [7] magick_2.8.5            farver_2.1.2            rmarkdown_2.28         [10] GlobalOptions_0.1.2     fs_1.6.5                zlibbioc_1.52.0        [13] vctrs_0.6.5             memoise_2.0.1           ggtree_3.14.0          [16] rstatix_0.7.2           tinytex_0.53            htmltools_0.5.8.1      [19] S4Arrays_1.6.0          broom_1.0.7             Formula_1.2-5          [22] gridGraphics_0.5-1      SparseArray_1.6.0       sass_0.4.9             [25] bslib_0.8.0             htmlwidgets_1.6.4       plyr_1.8.9             [28] cachem_1.1.0            igraph_2.1.1            lifecycle_1.0.4        [31] iterators_1.0.14        pkgconfig_2.0.3         gson_0.1.0             [34] Matrix_1.7-1            R6_2.5.1                fastmap_1.2.0          [37] GenomeInfoDbData_1.2.13 clue_0.3-65             aplot_0.2.3            [40] enrichplot_1.26.1       digest_0.6.37           colorspace_2.1-1       [43] patchwork_1.3.0         AnnotationDbi_1.68.0    RSQLite_2.3.7          [46] ggpubr_0.6.0            vegan_2.6-8             labeling_0.4.3         [49] fansi_1.0.6             httr_1.4.7              polyclip_1.10-7        [52] abind_1.4-8             mgcv_1.9-1              compiler_4.4.1         [55] bit64_4.5.2             withr_3.0.2             doParallel_1.0.17      [58] backports_1.5.0         BiocParallel_1.40.0     carData_3.0-5          [61] viridis_0.6.5           DBI_1.2.3               highr_0.11             [64] ggforce_0.4.2           R.utils_2.12.3          ggsignif_0.6.4         [67] MASS_7.3-61             DelayedArray_0.32.0     rjson_0.2.23           [70] permute_0.9-7           tools_4.4.1             ape_5.8                [73] R.oo_1.26.0             glue_1.8.0              nlme_3.1-166           [76] GOSemSim_2.32.0         grid_4.4.1              reshape2_1.4.4         [79] cluster_2.1.6           fgsea_1.32.0            generics_0.1.3         [82] gtable_0.3.6            R.methodsS3_1.8.2       tidyr_1.3.1            [85] data.table_1.16.2       car_3.1-3               tidygraph_1.3.1        [88] utf8_1.2.4              XVector_0.46.0          ggrepel_0.9.6          [91] foreach_1.5.2           pillar_1.9.0            stringr_1.5.1          [94] yulab.utils_0.1.7       circlize_0.4.16         splines_4.4.1          [97] tweenr_2.0.3            treeio_1.30.0           lattice_0.22-6         
[100] bit_4.5.0               tidyselect_1.2.1        GO.db_3.20.0           
[103] ComplexHeatmap_2.22.0   locfit_1.5-9.10         Biostrings_2.74.0      
[106] knitr_1.48              gridExtra_2.3           bookdown_0.41          
[109] xfun_0.49               graphlayouts_1.2.0      visNetwork_2.1.2       
[112] stringi_1.8.4           UCSC.utils_1.2.0        lazyeval_0.2.2         
[115] ggfun_0.1.7             yaml_2.3.10             evaluate_1.0.1         
[118] codetools_0.2-20        ggraph_2.2.1            tibble_3.2.1           
[121] qvalue_2.38.0           BiocManager_1.30.25     ggplotify_0.1.2        
[124] cli_3.6.3               munsell_0.5.1           jquerylib_0.1.4        
[127] Rcpp_1.0.13             png_0.1-8               parallel_4.4.1         
[130] ggplot2_3.5.1           blob_1.2.4              clusterProfiler_4.14.0 
[133] DOSE_4.0.0              tidytree_0.4.6          viridisLite_0.4.2      
[136] sigora_3.1.1            scales_1.3.0            purrr_1.0.2            
[139] crayon_1.5.3            GetoptLong_1.0.5        rlang_1.1.4            
[142] cowplot_1.1.3           fastmatch_1.1-4         KEGGREST_1.46.0 

参考

  • https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1012422

相关文章:

【R包】pathlinkR转录组数据分析和可视化利器

介绍 通常情况下&#xff0c;基因表达研究如微阵列和RNA-Seq会产生数百到数千个差异表达基因&#xff08;deg&#xff09;。理解如此庞大的数据集的生物学意义变得非常困难&#xff0c;尤其是在分析多个条件和比较的情况下。该软件包利用途径富集和蛋白-蛋白相互作用网络&…...

RPA 与 AI 结合:开启智能自动化新时代

RPA 与 AI 结合&#xff1a;开启智能自动化新时代 在当今数字化快速发展的时代&#xff0c;企业面临着海量的数据处理和复杂的业务流程&#xff0c;如何提高效率、降低成本、优化业务流程成为了企业关注的焦点。而 RPA&#xff08;Robotic Process Automation&#xff0c;机器…...

[免费]Springboot+Vue在线文档管理系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringbootVue在线文档管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue在线文档管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着科学技术的飞速发展&#xff0c;社会的方方面…...

内容选题与商业布局

内容选题与商业布局 提示词 1&#xff1a;人群链&#xff08;User Chain&#xff09;提示词 2&#xff1a;需求链&#xff08;Demand Chain&#xff09;提示词 3&#xff1a;环境 需求 优势 三要素提示词 4&#xff1a;垂直于“人性”而非只“赛道”提示词 5&#xff1a;基于…...

文字描边实现内黄外绿效果

网页使用 <!DOCTYPE html> <html> <head> <style> .text-effect {color: #ffd700; /* 黄色文字 */-webkit-text-stroke: 2px #008000; /* 绿色描边&#xff08;兼容Webkit内核&#xff09; */text-stroke: 2px #008000; /* 标准语法 *…...

网络协议 HTTP、HTTPS、HTTP/1.1、HTTP/2 对比分析

1. 基本定义 HTTP&#xff08;HyperText Transfer Protocol&#xff09; 应用层协议&#xff0c;用于客户端与服务器之间的数据传输&#xff08;默认端口 80&#xff09;。 HTTP/1.0&#xff1a;早期版本&#xff0c;每个请求需单独建立 TCP 连接&#xff0c;效率低。HTTP/1.1&…...

千峰React:Hooks(上)

什么是Hooks ref引用值 普通变量的改变一般是不好触发函数组件的渲染的&#xff0c;如果想让一般的数据也可以得到状态的保存&#xff0c;可以使用ref import { useState ,useRef} from reactfunction App() {const [count, setCount] useState(0)let num useRef(0)const h…...

salesforce 为什么无法关闭task,显示:insufficient access rights on object id

在 Salesforce 中&#xff0c;如果你在尝试关闭任务&#xff08;Task&#xff09;时遇到 “Insufficient access rights on object id” 错误&#xff0c;通常是由于以下几种可能的权限问题导致的&#xff1a; 1. 任务的所有权问题 Salesforce 中的任务&#xff08;Task&…...

机器学习:强化学习的epsilon贪心算法

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是一种机器学习方法&#xff0c;旨在通过与环境交互&#xff0c;使智能体&#xff08;Agent&#xff09;学习如何采取最优行动&#xff0c;以最大化某种累积奖励。它与监督学习和无监督学习不同&#xff0c;强调试错…...

MongoDB—(一主、一从、一仲裁)副本集搭建

MongoDB集群介绍&#xff1a; MongoDB 副本集是由多个MongoDB实例组成的集群&#xff0c;其中包含一个主节点&#xff08;Primary&#xff09;和多个从节点&#xff08;Secondary&#xff09;&#xff0c;用于提供数据冗余和高可用性。以下是搭建 MongoDB 副本集的详细步骤&am…...

MyBatis TypeHandler 详解与实战:FastJson 实现字符串转 List

在 MyBatis 中&#xff0c;TypeHandler 是实现 Java 类型与数据库类型双向转换 的核心组件。无论是处理基础数据类型还是复杂的 JSON、枚举或自定义对象&#xff0c;它都能通过灵活的扩展机制满足开发需求。本文将通过一个 将数据库 JSON 字符串转换为 List<User> 的案例…...

第二十八:5.5.【storeToRefs】5.6.【getters】

LoveTalk.vue: 调用&#xff1a; // 方法 const talkStore useTalkStore() function getLoveTalk(){ talkStore.getATalk() } 如果是要简短的形式调用&#xff1a; const talkStore useTalkStore() // user hooks 的形式调用 const {schoole,local} talkStore // …...

APISIX Dashboard上的配置操作

文章目录 登录配置路由配置消费者创建后端服务项目配置上游再创建一个路由测试 登录 http://192.168.10.101:9000/user/login?redirect%2Fdashboard 根据docker 容器里的指定端口&#xff1a; 配置路由 通过apisix 的API管理接口来创建&#xff08;此路由&#xff0c;直接…...

MinIO在 Docker中修改登录账号和密码

MinIO在 Docker中修改登录账号和密码 随着云计算和大数据技术的快速发展&#xff0c;对象存储服务逐渐成为企业数据管理的重要组成部分。MinIO 作为一种高性能、分布式的对象存储系统&#xff0c;因其简单易用、高效可靠的特点而备受开发者青睐。然而&#xff0c;在实际应用中…...

英文论文查重,Turnitin和IThenticate两个系统哪个更合适?

Turnitin系统和IThenticate系统都是检测英文论文的查重系统&#xff0c;但是两者之间还是有一些不一样的。 下面针对这两个系统给大家具体分析一下。 一、Turnitin系统 Turnitin检测系统&#xff1a; https://truth-turnitin.similarity-check.com Turnitin是世界上主流的…...

pnpm的基本用法

以下是 pnpm 的核心命令和使用指南&#xff0c;涵盖从安装依赖到项目管理的常见操作&#xff1a; 1. 基础命令 (1) 安装依赖 pnpm install # 安装 package.json 中的所有依赖 pnpm install <包名> # 安装指定包&#xff08;自动添加到 dependencies&#xf…...

【实战中提升自己】防火墙篇之双ISP切换与VRRP切换对于用户的体验

! 拓扑与说明 某公司的网络架构&#xff0c;这样的架构在目前的网络中是在常见的&#xff0c;假设您接收一个这样的网络&#xff0c;应该如何部署&#xff0c;该实战系列&#xff0c;就是一步一步讲解&#xff0c;如何规划、设计、部署这样一个环境&#xff0c;这…...

Go在1.22版本修复for循环陷阱

记录 前段时间升级Go版本碰到一个大坑&#xff0c;先记录。 先上代码案例&#xff1a; func main() {testClosure() }func testClosure() {for i : 0; i < 5; i {defer func() {fmt.Println(i)}()} }在1.22之下&#xff08;不包括1.22&#xff09;版本&#xff1a; 输出的…...

Nginx+PHP+MYSQL-Ubuntu在线安装

在 Ubuntu 上配置 Nginx、PHP 和 MySQL 的步骤如下&#xff1a; 1. 更新系统包 首先&#xff0c;确保系统包是最新的&#xff1a; sudo apt update sudo apt upgrade2. 安装 Nginx 安装 Nginx&#xff1a; sudo apt install nginx启动并启用 Nginx 服务&#xff1a; sudo…...

SpringDataJPA使用deleteAllInBatch方法逻辑删除失效

概述 在使用Spring Boot JPA时&#xff0c;执行批量删除操作时&#xff0c;遇到逻辑删除失效的问题。具体而言&#xff0c;当使用deleteAllInBatch方法时&#xff0c;数据会被物理删除&#xff0c;而不是进行逻辑删除&#xff1b;但是当使用deleteAll时&#xff0c;逻辑删除操…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...