GMSB文章九:微生物的相关关系组间波动

欢迎大家关注全网生信学习者系列:

  • WX公zhong号:生信学习者
  • Xiao hong书:生信学习者
  • 知hu:生信学习者
  • CDSN:生信学习者2

介绍

计算配对微生物在组间的相关关系波动情况进而评估不同分组的微生物状态。secom_linear 函数可以评估不同分组(例如,健康组与疾病组)中微生物分类群之间的线性相关性,帮助研究者理解不同分类群如何相互作用以及它们在不同状态下的相互关系。通过分析不同分组间微生物相关性的波动情况,secom_linear 函数能够揭示微生物群落结构的动态变化,这对于理解微生物群落对环境变化的响应至关重要。

在不同分组之间,微生物分类群的相互关系表现出显著的波动性。这种波动性反映了微生物群落结构在不同环境或条件下的动态变化,是评估微生物群落稳定性和功能多样性的关键指标。通过定量分析这些波动,研究者可以深入理解微生物群落如何响应外部扰动,以及它们在不同生态位中的作用和相互依赖性。

加载R包

library(readr)
library(openxlsx)
library(tidyverse) 
library(igraph)
library(ggraph)
library(tidygraph)
library(ggpubr)
library(microbiome)
library(ANCOMBC)

导入数据

大家通过以下链接下载数据:

  • 百度网盘链接:https://pan.baidu.com/s/1fz5tWy4mpJ7nd6C260abtg
  • 提取码: 请关注WX公zhong号_生信学习者_后台发送 复现gmsb 获取提取码
otu_table <- read_tsv("./data/GMSB-data/otu-table.tsv", show_col_types = FALSE)tax <- read_tsv("./data/GMSB-data/taxonomy.tsv", show_col_types = FALSE)meta_data <- read_csv("./data/GMSB-data/df_v1.csv", show_col_types = FALSE)

数据预处理

  • 提取差异物种丰度表
  • 合并分组变量和差异物种丰度表

Primary group: 按照频率分组

  • G1: # receptive anal intercourse = 0

  • G2: # receptive anal intercourse = 1

  • G3: # receptive anal intercourse = 2 - 5

  • G4: # receptive anal intercourse = 6 +

# OTU table
otu_id <- otu_table$`#OTU ID`
otu_table <- data.frame(otu_table[, -1], check.names = FALSE, row.names = otu_id)# Taxonomy table
otu_id <- tax$`Feature ID`
tax <- data.frame(tax[, - c(1, 3)], row.names = otu_id)
tax <- tax %>% separate(col = Taxon, into = c("Kingdom", "Phylum", "Class", "Order", "Family", "Genus", "Species"),sep = ";") %>%rowwise() %>%dplyr::mutate_all(function(x) strsplit(x, "__")[[1]][2]) %>%mutate(Species = ifelse(!is.na(Species) & !is.na(Genus),paste(ifelse(strsplit(Genus, "")[[1]][1] == "[",strsplit(Genus, "")[[1]][2],strsplit(Genus, "")[[1]][1]), Species, sep = "."),NA)) %>%ungroup()
tax <- as.matrix(tax)
rownames(tax) <- otu_id
tax[tax == ""] <- NA# Meta data
meta_data$status <- factor(meta_data$status, levels = c("nc", "sc"))
meta_data$time2aids <- factor(meta_data$time2aids,levels = c("never", "> 10 yrs","5 - 10 yrs", "< 5 yrs"))# Phyloseq object
OTU <- otu_table(otu_table, taxa_are_rows = TRUE)
META <- sample_data(meta_data)
sample_names(META) <- meta_data$sampleid
TAX <- tax_table(tax)
otu_data <- phyloseq(OTU, TAX, META)
species_data <- aggregate_taxa(otu_data, "Species")tse <- mia::makeTreeSummarizedExperimentFromPhyloseq(otu_data)
tse <- tse[, tse$group1 != "missing"]
tse1 <- tse[, tse$group1 == "g1"]
tse2 <- tse[, tse$group1 == "g2"]
tse3 <- tse[, tse$group1 == "g3"]
tse4 <- tse[, tse$group1 == "g4"]tse4key_species <- c("A.muciniphila", "B.caccae", "B.fragilis", "B.uniformis","Bacteroides spp.", "Butyricimonas spp.", "Dehalobacterium spp.", "Methanobrevibacter spp.", "Odoribacter spp.")
class: TreeSummarizedExperiment 
dim: 6111 35 
metadata(0):
assays(1): counts
rownames(6111): 000e1601e0051888d502cd6a535ecdda 0011d81f43ec49d21f2ab956ab12de2f ...fff3a05f150a52a2b6c238d2926a660d fffc6ea80dc6bb8cafacbab2d3b157b3
rowData names(7): Kingdom Phylum ... Genus Species
colnames(35): F-195 F-133 ... F-368 F-377
colData names(45): sampleid subjid ... hbv hcv
reducedDimNames(0):
mainExpName: NULL
altExpNames(0):
rowLinks: NULL
rowTree: NULL
colLinks: NULL
colTree: NULL

函数

  • get_upper_tri:获取上三角矩阵结果

  • data_preprocess:获取相关性画图矩阵

get_upper_tri <- function(cormat){cormat[lower.tri(cormat)] <- NAdiag(cormat) <- NAreturn(cormat)
}data_preprocess <- function(res, type = "linear", level = "Species", tax) {if (type == "linear") {df_corr <- res$corr_fl} else {df_corr <- res$dcorr_fl}if (level == "Species") {tax_name <- colnames(df_corr)tax_name <- sapply(tax_name, function(x) {name <- ifelse(grepl("Genus:", x), paste(strsplit(x, ":")[[1]][2], "spp."),ifelse(grepl("Species:", x), strsplit(x, ":")[[1]][2], x))return(name)})colnames(df_corr) <- tax_namerownames(df_corr) <- tax_namedf_corr <- df_corr[tax, tax]} else {tax_name <- colnames(df_corr)tax_name <- sapply(tax_name, function(x) strsplit(x, ":")[[1]][2])colnames(df_corr) <- tax_namerownames(df_corr) <- tax_namedf_corr <- df_corr[tax, tax]}tax_name <- sort(colnames(df_corr))df_corr <- df_corr[tax_name, tax_name]df_clean <- data.frame(get_upper_tri(df_corr)) %>%rownames_to_column("var1") %>%pivot_longer(cols = -var1, names_to = "var2", values_to = "value") # Correct for namesdf_name <- data.frame(var1 = unique(df_clean$var1),var2 = unique(df_clean$var2))for (i in seq_len(nrow(df_name))) {df_clean$var2[df_clean$var2 == df_name$var2[i]] = df_name$var1[i]}df_clean <- df_clean %>%filter(!is.na(value)) %>%mutate(value = round(value, 2))return(df_clean)
}

Linear correlations

secom_linear 函数是 ANCOMBC 包中的一个函数,用于在微生物组数据中进行线性相关性的稀疏估计。该函数支持三种相关性系数的计算:皮尔逊(Pearson)、斯皮尔曼(Spearman)和肯德尔(Kendall’s tau)相关系数。以下是 secom_linear 函数的主要参数和它们的作用:

  • data: 包含微生物组数据的列表。
  • assay_name: 指定数据集中的哪个检测类型(如“counts”)。
  • tax_level: 指定使用的分类水平,例如“Phylum”(门)。
  • pseudo: 伪计数,用于稳定稀疏矩阵的计算。
  • prv_cut: 用于过滤掉低丰度的物种的阈值。
  • lib_cut: 用于过滤掉低测序深度的样本的阈值。
  • corr_cut: 用于过滤掉低相关性的阈值。
  • wins_quant: 用于确定窗口大小的分位数。
  • method: 指定计算哪种相关性系数,可以是“pearson”、“spearman”。
  • soft: 是否使用软阈值。
  • thresh_len: 硬阈值的长度。
  • n_cv: 交叉验证的迭代次数。
  • thresh_hard: 硬阈值,用于确定最终的相关性矩阵。
  • max_p: 最大 p 值,用于多重测试校正。
  • n_cl: 聚类的数量。

函数会返回两个主要的结果对象:corr_thcorr_fl,分别代表阈值相关性矩阵和完整相关性矩阵。这些矩阵提供了不同物种或分类水平之间的线性相关性估计。

Run SECOM

secom_linear 函数1)首先通过设置不同的阈值来过滤数据,2)然后使用指定的方法计算相关性系数,3)并通过交叉验证等技术来确定最终的相关性矩阵。这个过程涉及到数据的预处理、相关性计算和结果的后处理,以确保相关性估计的准确性和稀疏性。

set.seed(123)res_linear1 <- ANCOMBC::secom_linear(data = list(tse1), assay_name = "counts",tax_level = "Species", pseudo = 0, prv_cut = 0.1, lib_cut = 1000, corr_cut = 0.5,wins_quant = c(0.05, 0.95), method = "pearson",soft = FALSE, thresh_len = 20, n_cv = 10,thresh_hard = 0.3, max_p = 0.005, n_cl = 2)names(res_linear1)res_linear2 <- ANCOMBC::secom_linear(data = list(tse2), assay_name = "counts",tax_level = "Species", pseudo = 0,prv_cut = 0.1, lib_cut = 1000, corr_cut = 0.5,wins_quant = c(0.05, 0.95), method = "pearson", soft = FALSE, thresh_len = 20, n_cv = 10, thresh_hard = 0.3, max_p = 0.005, n_cl = 2)res_linear3 <- ANCOMBC::secom_linear(data = list(tse3), assay_name = "counts",tax_level = "Species", pseudo = 0, prv_cut = 0.1, lib_cut = 1000, corr_cut = 0.5,wins_quant = c(0.05, 0.95), method = "pearson",soft = FALSE, thresh_len = 20, n_cv = 10, thresh_hard = 0.3, max_p = 0.005, n_cl = 2)res_linear4 <- ANCOMBC::secom_linear(data = list(tse4), assay_name = "counts",tax_level = "Species", pseudo = 0, prv_cut = 0.1, lib_cut = 1000, corr_cut = 0.5,wins_quant = c(0.05, 0.95), method = "pearson",soft = FALSE, thresh_len = 20, n_cv = 10, thresh_hard = 0.3, max_p = 0.005, n_cl = 2)species1 <- rownames(res_linear1$corr_fl)
species1 <- species1[grepl("Species:", species1)|grepl("Genus:", species1)]
species2 <- rownames(res_linear2$corr_fl)
species2 <- species2[grepl("Species:", species2)|grepl("Genus:", species2)]
species3 <- rownames(res_linear3$corr_fl)
species3 <- species3[grepl("Species:", species3)|grepl("Genus:", species3)]
species4 <- rownames(res_linear4$corr_fl)
species4 <- species4[grepl("Species:", species4)|grepl("Genus:", species4)]
common_species <- Reduce(intersect, list(species1, species2, species3, species4))
common_species <- sapply(common_species, function(x) ifelse(grepl("Genus:", x), paste(strsplit(x, ":")[[1]][2], "spp."),strsplit(x, ":")[[1]][2]))
[1] "s_diff_hat"  "y_hat"       "cv_error"    "thresh_grid" "thresh_opt"  "mat_cooccur" "corr"        "corr_p"     [9] "corr_th"     "corr_fl"  

结果:四个分组的线性相关的共有物种,查看微生物两两之间的相关系数

Visualization

可视化同一组微生物两两之间的相关系数在不同组的变化状态

df_corr1 <- data_preprocess(res_linear1, type = "linear", level = "Species", tax = key_species) %>%dplyr::mutate(group = "G1")
df_corr2 <- data_preprocess(res_linear2, type = "linear", level = "Species", tax = key_species) %>%dplyr::mutate(group = "G2")
df_corr3 <- data_preprocess(res_linear3, type = "linear", level = "Species", tax = key_species) %>%dplyr::mutate(group = "G3")
df_corr4 <- data_preprocess(res_linear4, type = "linear", level = "Species", tax = key_species) %>%dplyr::mutate(group = "G4")df_corr <- do.call('rbind', list(df_corr1, df_corr2, df_corr3, df_corr4)) %>%unite("pair", var1:var2, sep = " vs. ")value_check <- df_corr %>%dplyr::group_by(pair) %>%dplyr::summarise(empty_idx = ifelse(all(value == 0), TRUE, FALSE))non_empty_pair <- value_check %>%filter(empty_idx == FALSE) %>%.$pair
df_fig <- df_corr %>%dplyr::filter(pair %in% non_empty_pair)fig_species_linear <- df_fig %>%ggline(x = "group", y = "value",color = "steelblue", facet.by = "pair",xlab = "Correlation coefficient", ylab = "", title = "Pearson Correlation") +scale_y_continuous(breaks = seq(0, 0.8, 0.2), limits = c(0, 0.9)) +geom_text(aes(label = round(value, 2)), vjust = -0.5) +theme(plot.title = element_text(hjust = 0.5))fig_species_linear

在这里插入图片描述

结果:同一微生物对两两之间的相关关系在不同分组不同,这可能表明不同状态下,微生物之间的相关关系不一样或意味着不同的微生物模式。

Nonlinear correlations

secom_linear 函数是 ANCOMBC 包中的一个函数,用于在微生物组数据中进行线性相关性的稀疏估计。该函数支持三种相关性系数的计算:皮尔逊(Pearson)、斯皮尔曼(Spearman)和肯德尔(Kendall’s tau)相关系数。以下是 secom_linear 函数的主要参数和它们的作用:

  • data: 包含微生物组数据的列表。
  • assay_name: 指定数据集中的哪个检测类型(如“counts”)。
  • tax_level: 指定使用的分类水平,例如“Phylum”(门)。
  • pseudo: 伪计数,用于稳定稀疏矩阵的计算。
  • prv_cut: 用于过滤掉低丰度的物种的阈值。
  • lib_cut: 用于过滤掉低测序深度的样本的阈值。
  • corr_cut: 用于过滤掉低相关性的阈值。
  • wins_quant: 用于确定窗口大小的分位数。
  • method: 指定计算哪种相关性系数,可以是“pearson”、“spearman”。
  • soft: 是否使用软阈值。
  • thresh_len: 硬阈值的长度。
  • n_cv: 交叉验证的迭代次数。
  • thresh_hard: 硬阈值,用于确定最终的相关性矩阵。
  • max_p: 最大 p 值,用于多重测试校正。
  • n_cl: 聚类的数量。

函数会返回两个主要的结果对象:corr_thcorr_fl,分别代表阈值相关性矩阵和完整相关性矩阵。这些矩阵提供了不同物种或分类水平之间的线性相关性估计。

Run SECOM

secom_linear 函数1)首先通过设置不同的阈值来过滤数据,2)然后使用指定的方法计算相关性系数,3)并通过交叉验证等技术来确定最终的相关性矩阵。这个过程涉及到数据的预处理、相关性计算和结果的后处理,以确保相关性估计的准确性和稀疏性。

set.seed(123)res_dist1 <- ANCOMBC::secom_dist(data = list(tse1), assay_name = "counts",tax_level = "Species", pseudo = 0, prv_cut = 0.1, lib_cut = 1000, corr_cut = 0.5,wins_quant = c(0.05, 0.95),R = 1000, thresh_hard = 0.3, max_p = 0.005, n_cl = 2)res_dist2 <- ANCOMBC::secom_dist(data = list(tse2), assay_name = "counts",tax_level = "Species", pseudo = 0,prv_cut = 0.1, lib_cut = 1000, corr_cut = 0.5,wins_quant = c(0.05, 0.95),R = 1000, thresh_hard = 0.3, max_p = 0.005, n_cl = 2)res_dist3 <- ANCOMBC::secom_dist(data = list(tse3), assay_name = "counts",tax_level = "Species", pseudo = 0, prv_cut = 0.1, lib_cut = 1000, corr_cut = 0.5,wins_quant = c(0.05, 0.95),R = 1000, thresh_hard = 0.3, max_p = 0.005, n_cl = 2)res_dist4 <- ANCOMBC::secom_dist(data = list(tse4), assay_name = "counts",tax_level = "Species", pseudo = 0,prv_cut = 0.1, lib_cut = 1000, corr_cut = 0.5,wins_quant = c(0.05, 0.95),R = 1000, thresh_hard = 0.3, max_p = 0.005, n_cl = 2)species1 <- rownames(res_dist1$corr_fl)
species1 <- species1[grepl("Species:", species1)|grepl("Genus:", species1)]
species2 <- rownames(res_dist2$corr_fl)
species2 <- species2[grepl("Species:", species2)|grepl("Genus:", species2)]
species3 <- rownames(res_dist3$corr_fl)
species3 <- species3[grepl("Species:", species3)|grepl("Genus:", species3)]
species4 <- rownames(res_dist4$corr_fl)
species4 <- species4[grepl("Species:", species4)|grepl("Genus:", species4)]
common_species <- Reduce(intersect, list(species1, species2, species3, species4))
common_species <- sapply(common_species, function(x) ifelse(grepl("Genus:", x), paste(strsplit(x, ":")[[1]][2], "spp."),strsplit(x, ":")[[1]][2]))

结果:四个分组的线性相关的共有物种,查看微生物两两之间的相关系数

Visualization

可视化同一组微生物两两之间的相关系数在不同组的变化状态

df_corr1 <- data_preprocess(res_dist1, type = "dist", level = "Species", tax = key_species) %>%dplyr::mutate(group = "G1")
df_corr2 <- data_preprocess(res_dist2, type = "dist", level = "Species", tax = key_species) %>%dplyr::mutate(group = "G2")
df_corr3 <- data_preprocess(res_dist3, type = "dist", level = "Species", tax = key_species) %>%dplyr::mutate(group = "G3")
df_corr4 <- data_preprocess(res_dist4, type = "dist", level = "Species", tax = key_species) %>%dplyr::mutate(group = "G4")df_corr <- do.call('rbind', list(df_corr1, df_corr2, df_corr3, df_corr4)) %>%unite("pair", var1:var2, sep = " vs. ")value_check <- df_corr %>%dplyr::group_by(pair) %>%dplyr::summarise(empty_idx = ifelse(all(value == 0), TRUE, FALSE))non_empty_pair <- value_check %>%filter(empty_idx == FALSE) %>%.$pair
df_fig <- df_corr %>%dplyr::filter(pair %in% non_empty_pair)fig_species_dist <- df_fig %>%ggline(x = "group", y = "value",color = "steelblue", facet.by = "pair",xlab = "", ylab = "", title = "Distance Correlation") +scale_y_continuous(breaks = seq(0, 0.8, 0.2), limits = c(0, 0.9)) +geom_text(aes(label = round(value, 2)), vjust = -0.5) +theme(plot.title = element_text(hjust = 0.5))fig_species_dist


结果:同一微生物对两两之间的相关关系在不同分组不同,这可能表明不同状态下,微生物之间的相关关系不一样或意味着不同的微生物模式。

  • B.caccae vs. Bacteroides spp.的距离相关系数在G2组是0.68,而在G4组则是0,相比G4组,其他三个组是较为轻微的症状。同样的发现也在Bacteroides spp. vs. Butyricimonas spp.Bacteroides spp. vs. Odoribacter spp.中出现。

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

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

相关文章

线性表与顺序存储结构(下)

前言 接上文&#xff08;线性表与顺序存储结构&#xff08;上&#xff09;&#xff09;。 这些顺序存储结构的方法在顺序表上下卷中已经提到过&#xff0c;但是有些许不同&#xff0c;可以为理解顺序表提供更丰富的视角。&#xff08;不过最主要的区别在于顺序表上下卷中的顺…

Python | 计算位涡平流项

写在前面 最近忙着复习、考试…都没怎么空敲代码&#xff0c;还得再准备一周考试。。。等考完试再慢慢更新了&#xff0c;今天先来浅更一个简单但是使用的python code 在做动力机制分析时&#xff0c;我们常常需要借助收支方程来诊断不同过程的贡献&#xff0c;其中最常见的一…

51单片机-点亮LED灯

目录 新建项目选择型号添加新文件到该项目设置字体和utf-8编码二极管如何区分正负极原理&#xff1a;CPU通过寄存器来控制硬件电路 用P2寄存器的值控制第一个灯亮进制转换编译查看P2寄存器的地址生成HEX文件把代码下载到单片机中 新建项目 选择型号 stc是中国生产的、这个里面…

利用Linked SQL Server提权

点击星标&#xff0c;即时接收最新推文 本文选自《内网安全攻防&#xff1a;红队之路》 扫描二维码五折购书 利用Linked SQL Server提权 Linked SQL server是一个SQL Server数据库中的对象&#xff0c;它可以连接到另一个SQL Server或非SQL Server数据源&#xff08;如Oracle&a…

初学者轻松搞定19个经典的Python程序以及代码演示

Python的经典程序展示了Python语言基本特性和功能的简单示例,这些程序在学习和理解Python编程语言的过程中起着至关重要的作用. 一些常见的经典Python程序及其在学习Python时的功能&#xff1a; 1.Hello, World! print("Hello, World!")解释:这是Python的基本输出…

primeflex overflow样式类相关的用法和案例

文档地址&#xff1a;https://primeflex.org/overflow 案例1 <script setup> import axios from "axios"; import {ref} from "vue";const message ref("frontend variable") axios.get(http://127.0.0.1:8001/).then(function (respon…

【Flink】Flink SQL

一、Flink 架构 Flink 架构 | Apache Flink 二、设置TaskManager、Slot和Parallelism 在Apache Flink中&#xff0c;设置TaskManager、Slot和Parallelism是配置Flink集群性能和资源利用的关键步骤。以下是关于如何设置这些参数的详细指南&#xff1a; 1. TaskManager 设置 …

【漏洞复现】致远互联FE协作办公平台——SQL注入

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 致远互联FE协作办公平台是一个专注于协同管理软件领域的数智化运…

关于内存和外存文件不同字符集下占用空间大小问题

关于内存和外存不同字符集下文件占用空间大小问题 存储&#xff08;外存&#xff09;的文件中的字符&#xff1a; ASCII&#xff1a;每个字符占用1个字节&#xff0c;用来存储英文字符和常用标点符号。ISO-8859-1&#xff1a;每个字符占用1个字节&#xff0c;向下兼容ASCII。G…

DS18B20单总线数字温度传感器国产替代MY18E20 MY1820 MY18B20Z MY18B20L(一)

前言 DS18B20是全球第一个单总线数字温度传感器&#xff0c;推出时间已经超过30年&#xff0c;最早由美国达拉斯半导体公司推出&#xff0c;2001年1月&#xff0c;美信以25亿美元收购达拉斯半导体&#xff08;Dallas Semiconductor&#xff09;&#xff0c;而美信在2021年8月被…

DM达梦数据库存储过程

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

RDMA通信2:RDMA基本元素和组成 通信过程元素关系解析 视频教程

哈哈哈&#xff0c;今天我们把下面这张图理解了&#xff0c;我们的任务就完成了&#xff01; 视频教程在这&#xff1a;1.2 RDMA基本元素和组成 通信过程元素关系解析_哔哩哔哩_bilibili 一、WQ和WQE 工作队列元素(work queue element,WQE)&#xff1a;是软件下发给硬件的任务…

Apache Ranger 2.4.0 集成Hive 3.x(Kerbos)

一、解压tar包 tar zxvf ranger-2.4.0-hive-plugin.tar.gz 二、修改install.propertis POLICY_MGR_URLhttp://localhost:6080REPOSITORY_NAMEhive_repoCOMPONENT_INSTALL_DIR_NAME/BigData/run/hiveCUSTOM_USERhadoop 三、进行enable [roottv3-hadoop-01 ranger-2.4.0-hive…

什么是TOGAF架构框架的ADM方法?

ADM是架构开发方法&#xff08; Architecture Development Method&#xff09;&#xff0c;为开发企业架构所要执行的各个步骤以及它们质检的关系进行详细的定义&#xff0c;它是TOGAF规范中最为核心的内容。 ADM的具体步骤&#xff1a; 预备阶段&#xff08;Preliminary Phas…

STM32第十三课:DMA多通道采集光照烟雾

文章目录 需求一、DMA&#xff08;直接存储器存取&#xff09;二、实现流程1.时钟使能2.设置外设寄存器地址3.设置存储器地址4.设置要传输的数据量5.设置通道优先级6.设置传输方向7.使通道和ADC转换 三、数据处理四、需求实现总结 需求 通过DMA实现光照强度和烟雾浓度的多通道…

【SkiaSharp绘图13】SKCanvas方法详解(二)填充颜色、封装对象、高性能绘制、点(集)(多段)线、圆角矩形、Surface、沿路径绘制文字

文章目录 SKCanvas方法DrawColor 填充颜色DrawDrawable 绘制封装对象DrawImage 高性能绘制图像SKBitmap与SKImage对比DrawPicture 绘制图像SKPicture DrawPoint / DrawPoints 绘制点DrawRoundRect/DrawRoundRectDifference绘制圆角矩形DrawSurface 绘制SurfaceDrawTextOnPath沿…

List接口, ArrayList Vector LinkedList

Collection接口的子接口 子类Vector&#xff0c;ArrayList&#xff0c;LinkedList 1.元素的添加顺序和取出顺序一致&#xff0c;且可重复 2.每个元素都有其对应的顺序索引 方法 在index 1 的位置插入一个对象&#xff0c;list.add(1,list2)获取指定index位置的元素&#…

sheng的学习笔记-AI-聚类(Clustering)

ai目录 sheng的学习笔记-AI目录-CSDN博客 基础知识 什么是聚类 在“无监督学习”(unsupervised learning)中&#xff0c;训练样本的标记信息是未知的&#xff0c;目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律&#xff0c;为进一步的数据分析提供基础。此类学…

Android跨进程通信,binder传输数据过大导致客户端APP,Crash,异常捕获,监听异常的数值临界值,提前Hook拦截。

文章目录 Android跨进程通信&#xff0c;binder传输数据过大导致Crash&#xff0c;异常捕获&#xff0c;监听异常的数值临界值&#xff0c;提前Hook拦截。1.binder在做跨进程传输时&#xff0c;最大可以携带多少数据1.1有时候这个1m的崩溃系统捕获不到异常&#xff0c; 2.监测异…

志愿填报指南:为什么我强烈建议你报考计算机专业

首先恭喜2024届高考的同学们&#xff0c;你们已经通过了高考的考验&#xff0c;即将进入人生的新阶段——大学。 现在正是高考完填报志愿的时刻&#xff0c;Left听到身边朋友提到报考志愿的诸多问题&#xff1a; 志愿填报怎么填&#xff1f;我要报考什么专业&#xff1f;这个…