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

Seurat - Guided Clustering Tutorial官方文档学习及复现

由于本人没有使用过Seurat4.0,而是直接使用的最新版。所以本文都是基于Seurat5.2.0(截止2025/3/6)来进行撰写。

在这里插入图片描述

参考的官方教程来进行学习(上图中的 Guided tutorial-2.700 PBMCs),肯定没有官方文档那么全面,有一些细节我直接略过了,比如说一些数据处理的原理以及数据集的详细信息都没有去仔细查看,之后如果用到的话再补一补。

参考资料:

  1. 官方网站:Seurat - Guided Clustering Tutorial
  2. 官方数据集下载:pbmc3k_filtered_gene_bc_matrices.tar.gz
  3. 官方的所有教程:Analysis, visualization, and integration of Visium HD spatial datasets with Seurat • Seurat
  4. DimPlot函数官方参考文档:Dimensional reduction plot — DimPlot • Seurat
  5. Guided tutorial-2.700 PBMCS:Analysis, visualization, and integration of Visium HD spatial datasets with Seurat • Seurat

一些镜像网站:

  1. 官方镜像:https://cloud.r-project.org/
  2. 中科大镜像:http://mirrors.ustc.edu.cn/CRAN/
  3. 清华镜像:https://mirrors.tuna.tsinghua.edu.cn/CRAN/

1 Install packages & Setup the Seurat Object

Genomics 免费提供的外周血单核细胞 (PBMC) 数据集。在 Illumina NextSeq 500 上测序了 2,700 个单细胞。(官方文档直译)

官方数据集下载:pbmc3k_filtered_gene_bc_matrices.tar.gz

install.packages("Seurat", repos = "https://cloud.r-project.org/")
install.packages("dplyr", repos = "https://cloud.r-project.org/")
install.packages("patchwork", repos = "https://cloud.r-project.org/")
library(dplyr)
library(Seurat)
library(patchwork)# 导入数据集,下面的路径记得改为自己的
pbmc.data <- Read10X(data.dir = "F:/TestForR/pbmc3k/filtered_gene_bc_matrices/hg19")# 初始化Seurat对象
# 过滤数据集中测到的少于200个基因的细胞和少于3个细胞覆盖的基因
pbmc <- CreateSeuratObject(counts = pbmc.data, project = "pbmc3k", min.cells = 3, min.features = 200)
pbmc

2 Standard pre-processing workflow

以下步骤包括 Seurat 中 scRNA-seq 数据的标准预处理工作流程。这些代表了基于 QC 指标的细胞选择和过滤、数据标准化和缩放以及高度可变特征的检测。

Seurat 允许您轻松探索 QC(Quality-Control,质控) 指标并根据任何用户定义的标准筛选细胞。社区常用的一些 QC 指标包括:

  • 在每个细胞中检测到的唯一基因的数量。
    • 低质量的细胞或空液滴通常具有很少的基因
    • 细胞双联体或多联体可能表现出异常高的基因计数
  • 同样,在细胞内检测到的分子总数(与独特基因密切相关)
  • 映射到线粒体基因组的 reads 百分比
    • 低质量/垂死细胞通常表现出广泛的线粒体污染
    • 我们使用该函数计算线粒体 QC 指标,该函数计算源自一组特征的计数百分比 PercentageFeatureSet()
    • 我们使用以开头的所有基因集作为一组线粒体基因 MT-
pbmc[["percent.mt"]] <- PercentageFeatureSet(pbmc, pattern = "^MT-")

绘制小提琴图:过滤具有超过 2,500 个或少于 200 个唯一特征计数的单元格;过滤线粒体计数为 >5% 的细胞。

VlnPlot(pbmc, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3)

在这里插入图片描述图像分析:

  1. nFeature_RNA:显示了每个细胞检测到的基因数量。小提琴图的形状表示基因数量的分布,中间的黑色点表示数据的密度。通常,低质量的细胞或空液滴会有较少的基因检测数,而多联体细胞(多个细胞合并在一起)可能会有异常高的基因计数。

  2. nCount_RNA:显示了每个细胞的总RNA分子数(即测序读取数)。这与检测到的基因数量密切相关。类似地,低质量或垂死的细胞可能会有较低的RNA计数,而双联体或多联体细胞可能会有异常高的RNA计数。

  3. percent.mt:显示了映射到线粒体基因组的reads百分比。线粒体污染是单细胞RNA测序中常见的问题,可能会影响数据的解释。低质量或垂死细胞通常表现出较高的线粒体reads百分比,这可能是细胞损伤或死亡的迹象。

将特征之间的关系进行可视化

plot1 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "percent.mt")
plot2 <- FeatureScatter(pbmc, feature1 = "nCount_RNA", feature2 = "nFeature_RNA")
plot1 + plot2

在这里插入图片描述
图像结果分析:

  • 左图显示了总RNA分子数与线粒体reads百分比之间的关系,相关系数接近0,表明这两个指标之间没有明显的线性关系。线粒体污染的程度并不直接受到细胞总RNA分子数的影响。

  • 右图显示了总RNA分子数与检测到的基因数量之间的强正相关性,这是预期的,因为通常来说,一个细胞中的RNA分子数越多,能够检测到的基因种类也越多。

保留独特基因低于2500或高于200,线粒体计数<5%的细胞并储存到pbmc中

pbmc <- subset(pbmc, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < 5)

3 Normalizing the data

从数据集中删除不需要的单元格后,下一步是规范化数据。默认情况下,我们采用全局缩放归一化方法“LogNormalize”,该方法通过总表达式对每个单元格的特征表达式测量值进行归一化,将其乘以比例因子(默认为 10,000),然后对结果进行对数转换。

pbmc <- NormalizeData(pbmc, normalization.method = "LogNormalize", scale.factor = 10000)

在这里插入图片描述
为清楚起见,在前面的代码行(以及将来的命令)中,为函数调用中的某些参数提供了默认值。但是,这不是必需的,可以通过以下方式实现相同的行为:

pbmc <- NormalizeData(pbmc)

4 Identification of highly variable features(feature selection)

# 使用FindVariableFeatures函数找出变异特征(即变异性高的基因)
# selection.method参数设置为"vst",表示使用方差稳定转换方法进行选择
# nfeatures参数设置为2000,表示选择2000个变异性最高的基因
pbmc <- FindVariableFeatures(pbmc, selection.method = "vst", nfeatures = 2000)# 识别变异性最高的10个基因
# 首先使用VariableFeatures函数获取变异性高的基因名称,然后使用head函数选择前10个
top10 <- head(VariableFeatures(pbmc), 10)# 绘制变异特征的图,不包括基因标签
# VariableFeaturePlot函数用于绘制变异特征图,展示每个基因的变异性
plot1 <- VariableFeaturePlot(pbmc)# 在变异特征图上标注前10个变异性最高的基因
# LabelPoints函数用于在图上标注特定的点,points参数指定要标注的基因,repel参数设置为TRUE以避免标签重叠
plot2 <- LabelPoints(plot = plot1, points = top10, repel = TRUE)# 将两幅图合并显示,即在变异特征图上添加基因标签
plot1 + plot2

在这里插入图片描述
图片结果分析:

左图展示了所有基因的平均表达量与标准化方差的关系。变量基因(红色点)通常在平均表达量较高或较低时表现出较高的方差,而其他大部分基因则显示出较低的方差。帮助识别出哪些基因具有较高的变异性。

右图展示了变量基因在 PCA 中的负载情况。这些基因在主成分中的高负载表明它们在解释数据变异性和区分不同细胞类型方面具有重要作用。例如,PPBP在 PC1 中具有高负载,表明它在区分不同的细胞亚群中起到了关键作用。帮助理解哪些基因在区分不同细胞类型方面具有重要作用。

这里有个巨变态的报错:

Error in `value[[3L]]()`:
! The RStudio Plots window may be too small to show this patchwork.
ℹ Please make the window larger.
Run `rlang::last_trace()` to see where the error occurred.
警告信息:
1: In scale_x_log10() :log-10 transformation introduced infinite values.
2: In scale_x_log10() :log-10 transformation introduced infinite values.

然后你的plot图像里面显示不出来图片,他的意思是说你的视图窗口太小了,你把plot窗口拉大就OK了,有点无语说实话。


5 Scaling the data

接下来,我们应用线性变换(“缩放”),这是 PCA 等降维技术之前的必要步骤。这个步骤的主要功能包括:

  • 调整每个基因的表达值,使所有细胞的平均表达值为 0
  • 标准化每个基因的表达值,使所有细胞的方差为 1

这个步骤在后续分析中给予每个基因同等的权重,高表达基因不会占主导地位

  • 标准化后的结果存储在 pbmc[["RNA"]]$scale.data

  • 默认情况下,仅对可变特征进行缩放

  • 您也可以指定参数来缩放其他功能特征

all.genes <- rownames(pbmc)
pbmc <- ScaleData(pbmc, features = all.genes)

在这里插入图片描述


6 Perform linear dimensional reduction

接下来,我们对缩放数据执行 PCA(主成分分析)。默认情况下,只有先前确定的变量特征用作输入,但如果您希望选择不同的子集,则可以使用 features 参数进行定义(如果您确实想使用特征的自定义子集,请确保首先将这些变量传递给 ScaleData)。

对于第一个主成分,Seurat 输出具有最多正负载和负负载的基因列表,代表数据集中单个细胞之间表现出相关性(或反相关性)的基因模块。

pbmc <- RunPCA(pbmc, features = VariableFeatures(object = pbmc))

Seurat 提供了几种有用的方法来可视化定义 PCA 的单元格和特征,包括 VizDimReduction()DimPlot()DimHeatmap()

# 查看和可视化 PCA 结果的几种不同方式# 打印 PCA 结果,显示前 5 个主成分及其对应的基因
# 参数 dims 指定显示的主成分范围,nfeatures 指定每个主成分显示的基因数量
print(pbmc[["pca"]], dims = 1:5, nfeatures = 5)# 可视化主成分的基因负载,dims 参数指定要可视化的主成分,reduction 参数指定降维方法为 "pca"
VizDimLoadings(pbmc, dims = 1:2, reduction = "pca")

在这里插入图片描述图片分析: 左图展示了基因在PC1上的负载情况。右图展示了基因在PC2上的负载情况。

# 绘制 PCA 降维图,并移除图例
DimPlot(pbmc, reduction = "pca") + NoLegend()

在这里插入图片描述

# 使用DimHeatmap函数绘制热图,专注于PCA的第一个主成分
# dims参数指定要绘制的主成分,这里设置为1,代表第一个主成分
# cells参数指定要展示的细胞数量,这里设置为500
# balanced参数设置为TRUE,表示在热图中平衡展示正负负载的基因[^3^][^4^]
DimHeatmap(pbmc, dims = 1, cells = 500, balanced = TRUE)

在这里插入图片描述

# 绘制前15个主成分的热图,用于展示在PCA降维中每个主成分的基因表达模式
DimHeatmap(pbmc, dims = 1:15, cells = 500, balanced = TRUE)

在这里插入图片描述


7 Determine the dimensionality of the dataset

在单细胞RNA测序数据分析中,使用Seurat软件进行主成分分析(PCA)来克服技术噪音,并选择合适的主成分数量。虽然可以使用JackStraw程序启发的重采样测试,但这种方法计算成本高且缓慢。因此,推荐使用一种启发式方法,即通过“肘部图”(Elbow Plot)来确定主成分数量,该图根据每个成分解释的方差百分比进行排名,以识别数据中主要信号所在的主成分范围。文中暗示前10个主成分可能已经捕获了大部分的真实信号。(摘自官网)

ElbowPlot(pbmc)

在这里插入图片描述

图中曲线的“肘部”位置,即曲线开始变得平缓的点,暗示了在这一点之前的主成分能够解释大部分的数据变异,而额外的主成分贡献较小,因此常被用作选择合适主成分数量的依据。

出于好奇,去看了一下JackStraw程序启发的重采样测试并且进行复现,非常非常慢,花了五分钟才走完进度条,还Elbow Plot大法好。

在这里插入图片描述
代码在下面了:

# 对pbmc对象执行JackStraw测试,以评估每个主成分的显著性
# num.replicate参数设置为100,表示进行100次重复抽样
pbmc <- JackStraw(pbmc, num.replicate = 100)# 计算每个主成分的JackStraw得分,用于后续的显著性评估
# dims参数设置为1:20,表示计算前20个主成分的得分
pbmc <- ScoreJackStraw(pbmc, dims = 1:20)# 绘制前15个主成分的JackStraw显著性图,展示每个主成分的显著性得分
JackStrawPlot(pbmc, dims = 1:15)

在这里插入图片描述


8 Cluster the cells

官方文档中叽里呱啦说了一堆,看得头疼,直接放弃。我直接找的其他与Seurat相关的内容看了一下,结合KIMI整理了一下归纳总结如下。

Seurat 采用了基于图形的聚类方法,其灵感来源于 Macosko 等人的初始策略。该方法使用以下步骤进行聚类分析:

  1. 距离指标:基于先前确定的主成分(PC)保持不变。
  2. 改进的聚类方法:受到最近研究的启发,这些研究将基于图的聚类方法应用于单细胞RNA测序(scRNA-seq)数据和CyTOF数据。
  3. 图形结构:将单元格嵌入到图形结构中,例如K最近邻(KNN)图,并在具有相似特征表达模式的单元格之间绘制边缘。
  4. 社区划分:尝试将图划分为高度互连的“准小圈子”或“社区”。

主要步骤

  • 构建 KNN 图:首先根据 PCA 空间中的欧几里得距离构建 KNN 图,并根据局部邻域中的共享重叠(Jaccard 相似性)来细化边权重。使用函数FindNeighbors(),输入:前10个主成分(PC)

  • 聚类:应用模块化优化技术(如鲁汶算法或SLM)以迭代方式将单元分组,优化标准模块化函数。包含一个 resolution 参数,控制聚类的“粒度”,值增加会导致集群数量增加。推荐设置:0.4-1.2之间,适用于约3K细胞的单细胞数据集。使用函数:FindClusters()Idents()

pbmc <- FindNeighbors(pbmc, dims = 1:10)
pbmc <- FindClusters(pbmc, resolution = 0.5)

结果说明: 网络中有2638个节点,对应于单细胞数据集中的细胞数量;有95965条边,对应于细胞之间的连接数,这些连接是基于细胞间相似性计算得出的;在10次随机初始化后,获得的最大模块化值(modularity)为0.8723。模块化值是衡量网络划分质量的指标,值越高表示社区划分越好,通常值在0.3以上就被认为是一个良好的划分。算法识别出了9个社区,每个社区代表数据集中的一个细胞群,这些细胞群在基因表达模式上具有相似性。

在这里插入图片描述

head(Idents(pbmc), 5)

在这里插入图片描述
查看 pbmc 中前5个细胞的聚类标识(cluster IDs)。Idents() 函数用于获取 Seurat 对象中细胞的当前聚类标识,而 head() 函数用于显示这些标识的前5个值。输出结果显示了5个细胞的聚类标识,每个标识对应一个数字:

  • 第一个细胞(AAACATACAACCAC-1)被分配到簇2(cluster 2)。
  • 第二个细胞(AAACATTGAGCTAC-1)被分配到簇3(cluster 3)。
  • 第三个细胞(AAACATTGATCAGC-1)也被分配到簇2(cluster 2)。
  • 第四个细胞(AAACCGTGCTTCCG-1)被分配到簇1(cluster 1)。
  • 第五个细胞(AAACCGTGTATGCG-1)被分配到簇6(cluster 6)。

输出结果的最后部分(Levels: 0 1 2 3 4 5 6 7 8)显示了所有可能的聚类标识级别,从0到8。因为在这个Seurat对象中,细胞被分配到了9个不同的簇中,标识从0到8(类似数组下标?)。


9 Run non-linear dimensional reduction (UMAP/tSNE)

Seurat 提供了几种非线性降维技术,例如 t-SNE 和 UMAP,用于可视化和探索这些数据集。这些算法的目标是学习数据集中的底层结构,以便将相似的单元放在低维空间中。但所有可视化技术都有局限性,无法完全代表底层数据的复杂性。特别是,这些方法旨在保持数据集中的局部距离(即确保具有非常相似基因表达谱的细胞共定位),但通常不会保留更多的全局关系。官方鼓励用户利用 UMAP 等技术进行可视化,但要避免仅根据可视化技术得出生物学结论。
(之前玩python的时候用过t-sne做可视化,还没用过umap,感觉应该挺有意思)。

这里我就都试了一下,左边是umap,右边是tsne。然后官网说:“Which dimensionality reduction to use. If not specified, first searches for umap, then tsne, then pca”,所以我们首选umap,其次tsne,最次pca。

pbmc <- RunTSNE(pbmc, dims = 1:10) 
plot1 <- DimPlot(pbmc, reduction = "umap")
plot2 <- DimPlot(pbmc, reduction = "tsne")
plot1 + plot2

在这里插入图片描述

全文最重要的一步,保存pbmc对象:

# 将pbmc对象保存到指定路径,我这里用绝对路径
saveRDS(pbmc, file = "E:/Code/RCode/pbmc_tutorial.rds")

10 Finding differentially expressed features (cluster biomarkers)

Seurat能够帮助用户找到用于定义细胞簇的DE标记物。默认情况下,Seurat会识别指定簇与其他所有细胞相比的正负标记物。使用FindAllMarkers函数可以自动为所有簇执行标记物识别过程,也可以比较不同簇或单个细胞之间的差异。

在Seurat v5版本中,引入了presto软件包来显著提高DE分析的速度,特别是对于大型数据集。对于不使用presto的用户,可以通过调整FindMarkers函数中的min.pctlogfc.threshold参数来优化DE测试的速度和结果。

# 找出簇2中的所有标记物
cluster2.markers <- FindMarkers(pbmc, ident.1 = 2)
head(cluster2.markers, n = 5)

在这里插入图片描述

# 簇5与簇0/3之间的差异表达标志物
cluster5.markers <- FindMarkers(pbmc, ident.1 = 5, ident.2 = c(0, 3))
head(cluster5.markers, n = 5)

在这里插入图片描述

# 在所有剩余细胞中找到每簇的标记物,并只报道阳性位点
pbmc.markers <- FindAllMarkers(pbmc, only.pos = TRUE)
pbmc.markers %>%group_by(cluster) %>%dplyr::filter(avg_log2FC > 1)

下面这个结果是官网贴的,有七千多行,试了一下可以运行,一行就要35s左右,就不跑了…

## # A tibble: 7,046 × 7
## # Groups:   cluster [9]
##        p_val avg_log2FC pct.1 pct.2 p_val_adj cluster gene     
##        <dbl>      <dbl> <dbl> <dbl>     <dbl> <fct>   <chr>    
##  1 1.74e-109       1.19 0.897 0.593 2.39e-105 0       LDHB     
##  2 1.17e- 83       2.37 0.435 0.108 1.60e- 79 0       CCR7     
##  3 8.94e- 79       1.09 0.838 0.403 1.23e- 74 0       CD3D     
##  4 3.05e- 53       1.02 0.722 0.399 4.19e- 49 0       CD3E     
##  5 3.28e- 49       2.10 0.333 0.103 4.50e- 45 0       LEF1     
##  6 6.66e- 49       1.25 0.623 0.358 9.13e- 45 0       NOSIP    
##  7 9.31e- 44       2.02 0.328 0.11  1.28e- 39 0       PRKCQ-AS1
##  8 4.69e- 43       1.53 0.435 0.184 6.43e- 39 0       PIK3IP1  
##  9 1.47e- 39       2.70 0.195 0.04  2.01e- 35 0       FHIT     
## 10 2.44e- 33       1.94 0.262 0.087 3.34e- 29 0       MAL      
## # ℹ 7,036 more rows

但是呢,为了这个文档的完整性,我们可以根据前面的知识,来举一反三,只找前几个细胞簇的标记基因。

top_clusters <- 0:9 # 前9个
pbmc.markers <- FindAllMarkers(pbmc, idents = top_clusters, only.pos = TRUE)

在这里插入图片描述

Seurat 提供了多种差异表达(DE)测试方法,可以通过设置 test.use 参数来选择。test.use 参数允许你在不同的统计测试之间进行切换,以找到最适合你数据的测试方法。例如,你可以选择使用 ROC 测试,它返回任何一个标记基因的“分类能力”(范围从 0 - 随机到 1 - 完美)。

# 使用 ROC 测试找到簇 0 的标记基因
cluster0.markers <- FindMarkers(pbmc, ident.1 = 0, logfc.threshold = 0.25, test.use = "roc", only.pos = TRUE)

Seurat 还提供了多种工具来可视化标记基因的表达情况,如 VlnPlot()FeaturePlot()RidgePlot()CellScatter()DotPlot()。这些工具可以帮助你更好地理解不同基因在不同细胞簇中的表达模式。

VlnPlot(pbmc, features = c("MS4A1", "CD79A"))

在这里插入图片描述
MS4A1在细胞簇 2 和 6 中有较高的表达水平。在其他细胞簇中表达较低,尤其是簇 0、1、3、4、5 和 8。CD79A:在细胞簇 2 和 6 中也有较高的表达水平。在其他细胞簇中表达较低,尤其是簇 0、1、3、4、5 和 8。

MS4A1 和 CD79A 这两个基因在细胞簇 2 和 6 中高度表达,表明这些簇可能包含相似的细胞类型,例如 B 细胞。CD79A 是 B 细胞表面标志物,因此这两个簇可能主要由 B 细胞组成。

VlnPlot(pbmc, features = c("NKG7", "PF4"), slot = "counts", log = TRUE)

在这里插入图片描述
NKG7在细胞簇 3 和 5 中有较高的表达水平。在其他细胞簇中表达较低,尤其是簇 0、1、2、4、6 和 8。PF4在细胞簇 4 中有极高的表达水平。在其他细胞簇中表达较低,尤其是簇 0、1、2、3、5、6 和 8。

NKG7 在细胞簇 3 和 5 中高表达,表明这些簇可能包含 NK 细胞,因为 NKG7 是 NK 细胞的标志物。PF4 在细胞簇 4 中极高表达,表明这个簇可能包含血小板或巨核细胞,因为 PF4 是这些细胞的标志物。

FeaturePlot(pbmc, features = c("MS4A1", "GNLY", "CD3E", "CD14", "FCER1A", "FCGR3A", "LYZ", "PPBP","CD8A"))

在这里插入图片描述
这些基因在 UMAP 降维图上的表达分布帮助我们理解不同细胞簇的特征。例如,MS4A1 和 CD79A 的高表达区域可能对应于 B 细胞簇,而 GNLY 和 CD3E 的高表达区域可能对应于 T 细胞簇。

pbmc.markers %>%group_by(cluster) %>%dplyr::filter(avg_log2FC > 1) %>%slice_head(n = 10) %>%ungroup() -> top10
DoHeatmap(pbmc, features = top10$gene) + NoLegend()

如果你前面没跑pbmc.markers的代码的话,这里是会报错找不到对象'pbmc.markers',跑出来下面这张巨恐怖的图:
在这里插入图片描述

11 Assigning cell type identity to clusters

在这个数据集的情况下,我们可以使用规范标记轻松地将无偏聚类与已知细胞类型相匹配:

Cluster IDMarkersCell Type
0IL7R, CCR7Naive CD4+ T
1CD14, LYZCD14+ Mono
2IL7R, S100A4Memory CD4+
3MS4A1B
4CD8ACD8+ T
5FCGR3A, MS4A7FCGR3A+ Mono
6GNLY, NKG7NK
7FCER1A, CST3DC
8PPBPPlatelet
new.cluster.ids <- c("Naive CD4 T", "CD14+ Mono", "Memory CD4 T", "B", "CD8 T", "FCGR3A+ Mono","NK", "DC", "Platelet")
names(new.cluster.ids) <- levels(pbmc)
pbmc <- RenameIdents(pbmc, new.cluster.ids)
DimPlot(pbmc, reduction = "umap", label = TRUE, pt.size = 0.5) + NoLegend()

在这里插入图片描述

最后,别忘了保存你的Seurat对象

saveRDS(pbmc, file = "E:/Code/RCode/pbmc_final.rds")

12 个人学习过程中遇到的一些问题

12.1 install package失败问题

如果你直接安装的话他会和你说什么镜像问题,所以直接用镜像安装就OK了,很简单的问题。

install.packages("spatstat.utils", repos = "https://cloud.r-project.org/")

12.2 library(Seurat)导包问题

报错如下:

> library(Seurat)
载入需要的程序包:SeuratObject
载入需要的程序包:sp
载入程序包:‘SeuratObject’
The following objects are masked from ‘package:base’:intersect, t错误: package or namespace load failed for ‘Seurat’ in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]):不存在叫‘spatstat.utils’这个名称的程序包

这里其实很蠢,就是RStudio需要自己手动勾选你需要的package,但是我一直在从代码里面去导包,这里一直没有打钩,在这里卡了快二十多分钟吧。。。记录一下,然后可能会出现你其实已经Install某个包了,但是一直给你报错,就是因为你没打钩。。。。。。。

在这里插入图片描述

相关文章:

Seurat - Guided Clustering Tutorial官方文档学习及复现

由于本人没有使用过Seurat4.0&#xff0c;而是直接使用的最新版。所以本文都是基于Seurat5.2.0&#xff08;截止2025/3/6&#xff09;来进行撰写。 参考的官方教程来进行学习&#xff08;上图中的 Guided tutorial-2.700 PBMCs&#xff09;&#xff0c;肯定没有官方文档那么全面…...

Python数据分析面试题及参考答案

目录 处理 DataFrame 中多列缺失值的 5 种方法 批量替换指定列中的异常值为中位数 使用正则表达式清洗电话号码格式 合并两个存在部分重叠列的 DataFrame 将非结构化 JSON 日志转换为结构化表格 处理日期列中的多种非标准格式(如 "2023 年 12 月 / 05 日") 识…...

极狐GitLab 正式发布安全版本17.9.1、17.8.4、17.7.6

本分分享极狐GitLab 补丁版本 17.9.1、17.8.4、17.7.6 的详细内容。这几个版本包含重要的缺陷和安全修复代码&#xff0c;我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLab SaaS&#xff0c;技术团队已经进行了升级&#xff0c;无需用户采取任何…...

【JavaSE-7】方法的使用

1、方法的概念和使用 1.1、什么是方法 方法&#xff08;method&#xff09;是程序中最小的执行单元&#xff0c;类似于 C语言中的函数&#xff0c;方法存在的意义&#xff1a; 是能够模块化的组织代码(当代码规模比较复杂的时候).做到代码被重复使用, 一份代码可以在多个位置…...

阿里推出全新推理模型(因果语言模型),仅1/20参数媲美DeepSeek R1

阿里Qwen 团队正式发布了他们最新的研究成果——QwQ-32B大语言模型&#xff01;这款模型不仅名字萌萌哒(QwQ)&#xff0c;实力更是不容小觑&#xff01;&#x1f60e; QwQ-32B 已在 Hugging Face 和 ModelScope 开源&#xff0c;采用了 Apache 2.0 开源协议。大家可通过 Qwen C…...

C语言笔记(通讯录)

目录 1.通讯录的架构 2.通讯录的功能 3.实现静态通讯录的功能步骤 3.1.创建通讯录数组 3.2.显示功能菜单 3.3.初始化通讯录 3.4.添加联系人的信息 3.5.显示联系人的信息 3.6.查找某个人的信息 3.7.删除某一个联系人信息 3.8.修改某一联系人的信息 3.9.按名字对联系…...

【Manus资料合集】激活码内测渠道+《Manus Al:Agent应用的ChatGPT时刻》(附资源)

DeepSeek 之后&#xff0c;又一个AI沸腾&#xff0c;冲击的不仅仅是通用大模型。 ——全球首款通用AI Agent的破圈启示录 2025年3月6日凌晨&#xff0c;全球AI圈被一款名为Manus的产品彻底点燃。由Monica团队&#xff08;隶属中国夜莺科技&#xff09;推出的“全球首款通用AI…...

Python 面向对象高级编程-定制类

目录 __str__ __iter__ __getitem__ __getattr__ __call__ 小结 看到类似__slots__这种形如__xxx__的变量或者函数名就要注意&#xff0c;这些在Python中是有特殊用途的。 __slots__我们已经知道怎么用了&#xff0c;__len__()方法我们也知道是为了能让class作用于len()…...

安装remixd,在VScode创建hardhat

在终端&#xff0c;以管理员身份&#xff0c;cmd 需要科学上网 npm install -g remix-project/remixd 在vscode插件中&#xff0c;安装solidity插件&#xff0c;是暗灰色那款 1.将nodeJs的版本升级至18以上 2.在vscode打开一个新的文件&#xff0c;在终端输入 npx hardhat 3.…...

开发环境搭建-02.后端环境搭建-熟悉项目结构

一.后端环境搭建...

Linux(Centos 7.6)命令详解:vi

1.命令作用 vi/vim 是Linux 系统内置不可或缺的文本编辑命令&#xff0c;vim 是vi 的加强版本&#xff0c;兼容vi 的所有指令&#xff0c;不仅能编辑文本&#xff0c;而且还具有shell 程序编辑的功能&#xff0c;可以不同颜色的字体来辨别语法的正确性。 2.命令语法 usage: …...

Ubuntu 20.04下配置VSCode以支持Eigen库开发

这里写目录标题 1. 安装Eigen库2. 配置VSCode的C开发环境3. 配置c_cpp_properties.json4. 编写代码并测试5. 配置tasks.json&#xff08;可选&#xff09;6. 运行程序总结 在VSCode中配置Eigen库&#xff08;用于线性代数、矩阵和向量运算的C库&#xff09;的步骤如下&#xff…...

正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-2.1 uboot简介

前言&#xff1a; 本文是根据哔哩哔哩网站上“Arm(iMX6U)Linux系统移植和根文件系统构键篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。 引用&#xff1a; …...

Android14 OTA差分包升级报kPayloadTimestampError (51)

由于VF 架构&#xff0c; 所以镜像的打包时间可能存在偏差&#xff0c; 如 boot.img 和 客制化的一些镜像打包 可能会在 vendor 侧进行打包。 而 与system 侧进行merge 时&#xff0c;时间戳比较乱&#xff0c;为了解决这个问题&#xff0c;让时间戳进行统一。 使用adb方式验证…...

PPT 技能:巧用 “节” 功能,让演示文稿更有序

在制作PPT时&#xff0c;你是否遇到过这样的情况&#xff1a;幻灯片越来越多&#xff0c;内容越来越杂&#xff0c;找某一页内容时翻得眼花缭乱&#xff1f;尤其是在处理大型PPT文件时&#xff0c;如果没有合理的结构&#xff0c;编辑和调整都会变得非常麻烦。这时候&#xff0…...

Mysql创建库、表练习

创建库 #创建 create database gc_novels default charsetutf8mb4;#default charsetutf8mb4 指定编码为utf-8#使用 use gc_novels#查看当前所在位置 select database(); 结果&#xff1a; 创建表 #创建 create table heros(-> id int,-> name varchar(50),-&…...

【原创】Ollama Test API For Linux/MacOS/Unix

安装Json解析工具 Linux/Unix sudo apt-get install jq -yMacOS brew install jq -y设置环境变量 export IP"192.168.250.229" export PORT"8080" export MODEL"deepseek-r1:7b"检查Ollama版本 curl http://"$IP":"$PORT&qu…...

盛铂科技 SLMF315频率综合器200MHz至15GHz 国产频综模块

在当今科技飞速发展的时代&#xff0c;射频技术在众多领域发挥着关键作用&#xff0c;从通信、雷达系统到科研实验&#xff0c;对频率综合器的性能要求日益严苛。以下是关于盛铂科技的 SLMF315 超低相位噪声频率综合器的介绍&#xff1a; SLMF315超低相位噪声0.2至15GHz频率综合…...

AI-前端开发webcrumbs.ai/frontend-ai,Fitten Code提高开发效率

1.webcrumbs.ai/frontend-ai Frontend AI by Webcrumbshttps://app.webcrumbs.ai/frontend-ai 可选择某一模版进行生成对应版本代码&#xff0c;减少开发量。 2.Fitten Code Vue AI 编程助手 Vue AI 编程助手 | 菜鸟教程https://www.runoob.com/vue2/fitten-code-vue2.htm…...

DeepSeek开源Day4:DualPipeEPLB技术详解

2 月 24 日&#xff0c;DeepSeek 启动 “开源周”&#xff0c;第四个开源的代码库为 DualPipe 与 EPLB&#xff08;一下发布了两个&#xff09;。DualPipe 与 EPLB 依然使用了大量与 Hopper 架构绑定的技术。 DualPipe 是由 DeepSeek-AI 团队开发的一种双向流水线并行通信算法&…...

代码随想录算法训练营第22天 | 组合 组合总和 电话号码的字母组合

77. 组合 77. 组合 - 力扣&#xff08;LeetCode&#xff09; class Solution {List<Integer> path new ArrayList<>();List<List<Integer>> result new ArrayList<>();public void backTracking(int n,int k,int startIndex){if(path.size() …...

Oracle19c进入EM Express(Oracle企业管理器)详细步骤

以下是使用Oracle 19c进入Oracle Enterprise Manager Database Express&#xff08;EM Express&#xff09;的详细步骤&#xff1a; ### **步骤 1&#xff1a;确认EM Express配置状态** 1. **登录数据库服务器** 使用Oracle用户或管理员权限账户登录操作系统。 2. **查看EM…...

Oracle 数据库基础入门(六):视图与索引的深入解析

在 Oracle 数据库的知识体系中&#xff0c;视图与索引是提升数据库操作效率和优化数据管理的重要工具。对于 Java 全栈开发者而言&#xff0c;熟练掌握视图与索引的运用&#xff0c;不仅能够增强数据库查询的性能&#xff0c;还能为构建高效稳定的后端应用提供有力支持。接下来…...

机器学习-随机森林解析

目录 一、.随机森林的思想 二、随机森林构建步骤 1.自助采样 2.特征随机选择 3构建决策树 4.集成预测 三. 随机森林的关键优势 ​**(1) 减少过拟合** ​**(2) 高效并行化** ​**(3) 特征重要性评估** ​**(4) 耐抗噪声** 四. 随机森林的优缺点 ​优点 ​缺点 五.…...

Qt添加MySql数据库驱动

文章目录 一. 安装MySql二.编译mysql动态链接库 Qt版本&#xff1a;5.14.2 MySql版本&#xff1a;8.0.41 一. 安装MySql 参考这里进行安装&#xff1a;https://blog.csdn.net/qq_30150579/article/details/146042922 将mysql安装目录里的bin&#xff0c;include和lib拷贝出来…...

MR的环形缓冲区(底层)

MapReduce的大致流程&#xff1a; 1、HDFS读取数据&#xff1b; 2、按照规则进行分片&#xff0c;形成若干个spilt&#xff1b; 3、进行Map 4、打上分区标签&#xff08;patition&#xff09; 5、数据入环形缓冲区&#xff08;KVbuffer&#xff09; 6、原地排序&#xff…...

RMAN备份bug-审计日志暴涨(select action from gv$session)

问题概述 /oracle 文件系统使用率过大&#xff0c;经过检查是审计日志过大,/oracle 目录 197G 审计日志占用70G&#xff0c;每6个小时产生大量审计日志&#xff0c;日志内容全是select action from gv$session &#xff0c;猜测可能跟备份有关&#xff0c; $>df -h /oracle…...

30秒从零搭建机器人管理系统(Trae)

1. 安装 [Trae官网】(https://www.trae.com.cn/) 2. 提示词 创建一个BS架构的机器人远程操控系统&#xff0c;具备机器人状态及位置实时更新&#xff0c;可以实现机器人远程遥控&#xff0c;可以对机器人工作日志进行统计分析&#xff0c;以及其它管理系统的常用功能3. 模型…...

OpenFeign 学习笔记

OpenFeign 学习笔记 一、基础入门 1.1 简介 OpenFeign 是基于声明式的 REST 客户端&#xff0c;用于简化服务间远程调用。&#xff08;编程式 REST 客户端&#xff08;RestTemplate&#xff09;&#xff09; 通过接口注解方式定义 HTTP 请求&#xff0c;自动实现服务调用。 …...

单例模式(线程案例)

单例模式可以分为两种&#xff1a;1.饿汉模式 2.懒汉模式 一.饿汉模式 //饿汉模式&#x1f447; class MySingleTon{//因为这是一个静态成员变量&#xff0c;在类加载的时候&#xff0c;就创建了private static MySingleTon mySingleTon new MySingleTon();//创建一个静…...

HttpServletRequest 和 HttpServletResponse 不同JDK版本的引入

java中&#xff0c;可能会用到JWT令牌校验&#xff0c; 这时&#xff0c;大概率会用到 HttpServletRequest&#xff0c;和 HttpServletResponse。 若为 JDK8&#xff0c;SpringBoot 2.7.3 的版本则引入&#xff1a; import javax.servlet.http.HttpServletRequest; import ja…...

数据安全VS创作自由:ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南

文章目录 数据安全VS创作自由&#xff1a;ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南ChatGPTKimi腾讯元宝DeepSeek 数据安全VS创作自由&#xff1a;ChatGPT与国产AI工具隐私管理对比——论文党程序员必看的避坑指南 产品隐私设置操作路径隐私协议ChatGPT…...

【JavaEE】SpringMVC简单练习

目录 一、计算器1.1 接口定义1.2 前端代码1.3 后端代码1.4 运行结果 二、⽤⼾登录2.1 需求2.2 接口定义2.3 前端页面2.4 后端代码2.5 结果 三、留⾔板3.1 需求:3.2 接口3.3 前端代码3.4 后端代码3.5 运行结果 四、图书管理系统4.1 需求4.2 接口定义4.3 后端代码 一、计算器 1.…...

文件上传漏洞:upload-labs靶场11-20

目录 pass-11 pass-12 pass-13 pass-14 pass-15 pass-16 pass-17 pass-18 pass-19 pass-20 pass-11 分析源代码 &#xff0c;发现上传文件的存放路径可控 if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_ext substr($_FILES[upload_file][name],st…...

苹果Siri升级遇阻,国行iPhone或将引入阿里、百度AI自救

AI整合进展缓慢 苹果正加速将生成式AI技术整合至Siri&#xff0c;但内部消息称其底层技术研发落后于竞争对手&#xff0c;进展未达预期。 国行iPhone将引入双AI模型 苹果计划在2025年中期为国行iPhone引入AI功能&#xff0c;目前已敲定与 阿里巴巴、百度 合作&#xff0c;用户…...

立即释放 Mac 空间!Duplicate File Finder 8 重复文件高速清理工具

Duplicate File Finder 专业的 Mac 重复文件清理工具。查找并删除重复的文件、文件夹&#xff0c;甚至相似的照片。 不要让无用的文件占用磁盘上的宝贵空间。 整理你的 Mac。用最好的重复文件查找器来管理你的文件集合。 扫描任何磁盘或文件夹 主文件夹、照片/音乐库、外部磁…...

ES时序数据库的性能优化

本文主要是讲解了Elasticsearch数据库的优化&#xff0c;大家可以看一下。因为当时实操中涉及了6版本和7版本的一起优化&#xff0c;所以内容上大家自行区分一下。 一、基础设置 1. jvm.options参数详解 不同版本java配置会不一样 -Xms12g -Xmx12g 说明&#xff1a; 将 Xms…...

第3章:启动界面与主界面设计

第3章:启动界面与主界面设计 学习目标 掌握SwiftUI中的启动界面(Splash Screen)设计与实现学习主界面的布局与导航结构设计实现灵感笔记的列表与网格视图掌握SwiftUI中的动画与过渡效果学习如何使用环境对象共享数据理论知识讲解 启动界面设计原则 启动界面(Splash Scre…...

c++ 作用域解析操作符::

目录 什么是 ::&#xff1f; 基本语法 主要用途 1. 访问全局作用域 2. 访问类的静态成员 3. 访问命名空间中的内容 4. 区分嵌套作用域 5. 在类中定义成员函数 注意事项 什么是 ::&#xff1f; 在C中&#xff0c;:: 是作用域解析操作符&#xff08;Scope Resolution O…...

JavaScript数据类型转换

在JavaScript编程中&#xff0c;由于其动态类型特性&#xff0c;经常需要在不同的数据类型之间进行转换。正确地执行类型转换不仅能够避免潜在的错误&#xff0c;还能提高代码的灵活性和可维护性。本文将探讨JavaScript中的常见数据类型转换方法&#xff0c;并提供一些实用的例…...

css错峰布局/瀑布流样式(类似于快手样式)

当样式一侧比较高的时候会自动换行&#xff0c;尽量保持高度大概一致&#xff0c; 例&#xff1a; 一侧元素为5&#xff0c;另一侧元素为6 当为5的一侧过于高的时候&#xff0c;可能会变为4/7分部dom节点 如果不需要这样的话删除样式 flex-flow:column wrap; 设置父级dom样…...

AI 技术 引入 RTK(实时动态定位)系统,可以实现智能化管理和自动化运行

将 AI 技术 引入 RTK(实时动态定位)系统,可以实现智能化管理和自动化运行,从而提高系统的精度、效率和可靠性。以下是 AI 技术在 RTK 系统中的应用实例: 一、AI 技术在 RTK 系统中的应用场景 1. 整周模糊度快速解算 问题:RTK 的核心是解算载波相位的整周模糊度,传统方法…...

【STM32F103ZET6——库函数】11.捕获红外信号

目录 红外原理 数据码 引导码 连发码 配置捕获引脚 使能引脚时钟 配置定时器 使能定时器时钟 配置输入捕获 中断优先级分组 配置定时器4中断 定时器中断使能 使能定时器 重写定时器中断服务函数 清空定时器中断标志位 例程 例程说明 main.h main.c HongWai…...

江科大51单片机笔记【9】DS1302实时时钟(上)

一、DS1302介绍 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时&#xff0c;且具有闰年补偿等多种功能。RTC&#xff08;Real Time Clock&#xff09;&#xff1a;实时时钟&#xff0c;是一种集成电路…...

在Spring Boot + MyBatis中优雅处理多表数据清洗:基于XML的配置化方案

问题背景 在实际业务中&#xff0c;我们常会遇到数据冗余问题。例如&#xff0c;一个公司表&#xff08;sys_company&#xff09;中存在多条相同公司名的记录&#xff0c;但只有一条有效&#xff08;del_flag0&#xff09;&#xff0c;其余需要删除。删除前需将关联表&#xf…...

【计网】网络层

网络层 4.1 网络层提供的两种服务&#xff08;一&#xff09; 面向连接的虚电路服务&#xff08;二&#xff09; 无连接的数据报服务 4.2 IPv44.2.1 IPv4概述4.2.2 分类编址的IPv4地址4.2.3 划分子网的IPv4地址4.2.4 无分类编址的IPv4地址4.2.5 IPv4地址的应用规划&#xff08;…...

稳定性保障-前端

前端稳定性保障是确保应用在各种环境下都能 高效、稳定、无错误 运行的策略和方法。可以从 监控、测试、容灾、优化 等方面进行保障。 &#x1f4cc; 1. 监控 & 报警 实时监控 线上情况&#xff0c;及时发现问题。 ✅ 1.1 前端错误监控 • Sentry、Fundebug&#xff1a…...

批量给 Word 中的所有图片添加水印

如果要给一个 Word 文档加水印&#xff0c;很多小伙伴都能轻松的完成&#xff0c;因为使用 Office 就能轻松的操作&#xff0c;并且也有很多第三方的工具可以帮我们实现。那假如需要给 Word 中的每一张图片都添加上水印&#xff0c;那有什么比较好的方法实现呢&#xff1f;今天…...

jQuery UI 简介

jQuery UI 简介 引言 随着互联网技术的飞速发展,前端开发已经成为网站和应用程序建设的重要组成部分。jQuery UI 是一个基于 jQuery 的用户界面库,它为开发者提供了丰富的交互组件和视觉效果,使得创建具有吸引力和互动性的网页变得更加简单。本文将为您详细介绍 jQuery UI…...

`label` 标签的 `for` 属性详解

一、基本概念 label 标签的 for 属性用于将标签与表单控件&#xff08;如 input、select 等&#xff09;绑定&#xff0c;其值需与目标元素的 id 完全匹配。这种关联允许用户点击标签时触发控件交互&#xff08;如聚焦输入框或切换复选框&#xff09;&#xff0c;提升操作便捷…...