news 2026/9/9 15:07:06

空间转录组三大核心分析模式:细胞映射、结构域识别与通讯推断

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
空间转录组三大核心分析模式:细胞映射、结构域识别与通讯推断

空间转录组这几年在科研圈的热度不用我多说,几乎每个做组织微环境、发育生物学、肿瘤免疫的课题组都在往这个方向上靠。但很多人拿到数据后第一反应是懵——这玩意到底怎么分析?它跟单细胞转录组到底有什么区别?我到底该往哪个方向挖掘?去年我前后跑了将近二十套空间转录组数据,从一开始对着Seurat的教程硬啃,到后来能够针对不同的科学问题快速搭出分析方案,中间踩了不少坑,也总结出一些比较稳定的思路。今天就把我对空间转录组三类核心分析模式的理解整理出来,希望对准备入门或者已经被数据折磨得头秃的朋友有点帮助。

先说一句题外话:空间转录组本质上是在单细胞转录组的基础上多给了你一个坐标。有了坐标意味着什么?意味着你可以回答过去单细胞数据回答不了的问题——那些细胞在组织里到底待在哪、旁边是谁、它们之间有没有物理接触、不同区域在转录水平上有多大的差异。说得直白点,单细胞数据是告诉你“有哪些演员、各自说了什么台词”,空间转录组是额外告诉你“舞台上每个人站在哪个位置、谁跟谁挨着”。

但位置带来便利的同时也带来了分析上的复杂度,这也是为什么会出现不同的分析模式。每一种模式的出发点、算法逻辑、适用场景都不一样,没有一套代码能同时解决所有问题。你要做的第一件事就是想清楚,你的生物学问题到底属于哪一类。

1. 空间转录组数据的基本盘:数据结构和预处理

在拆三种分析模式之前,我必须先把数据预处理这部分讲清楚,因为不管你后续走哪条分析路线,这一步都是地基。很多时候分析结果不理想,问题不是出在后面的算法选择上,而是前面的数据过滤跟标准化就没做对。

空间转录组的原始数据长什么样?以最主流的10x Visium平台为例,一张切片上排列着大约5000个spot(斑点),每个spot的直径是55微米,spot之间的中心距离是100微米。一个spot里捕获的是周围多个细胞的混合转录本,理论上包含1到10个细胞不等,具体取决于组织类型和细胞密度。这意味着什么?空间转录组的每一个spot本质上是一个“小规模的bulk转录组”,它的分辨率是“区域级”而不是“单细胞级”的。这一点贯穿所有分析模式,无论你后面做什么,都不能忘了这个前提。

数据预处理的核心步骤和单细胞基本一致,包括质量控制、标准化、特征选择、降维和聚类。但在实际操作中,有几个空间数据特有的坑需要特别注意。

第一个坑是线粒体基因比例的问题。在单细胞数据里,线粒体基因比例高通常意味着细胞状态差或者正在凋亡,所以我们会设定一个阈值(比如20%)把这种细胞过滤掉。但在空间转录组里,情况不完全一样——如果一个spot正好落在组织边缘,或者切片处理过程中细胞受损,线粒体比例也会很高。我的做法是先看整体分布,如果大部分spot的线粒体比例集中在10%以下,可以把阈值放宽到25%;但如果数据质量本身不错,还是建议卡在15%-20%之间。关键是不要无脑过滤,要看具体切片的QC指标。

第二个坑是spot的过滤。有些spot可能落在组织切片以外,或者几乎没有捕获到任何转录本。Seurat里会建议过滤掉count小于某个阈值的spot,但我会额外检查这些spot在组织图像上的位置。如果你用的平台带有H&E染色图像,建议把filtered的spot直接可视化到图像上,看看它们是不是正好对应组织边缘或者切片有缺损的区域。这样做的好处是你能直观地判断过滤是否合理,也能在后续分析里避开通孔区域或边缘区域的假信号。

第三个坑是标准化方法的选择。这一点我必须强调:SCTransform在空间转录组数据分析里的表现,比传统的LogNormalize要好不少。原因有两个,一是空间数据本身的捕获效率在不同spot之间存在比较明显的差异,SCTransform的正则化框架能更好地处理这种技术噪声;二是SCTransform可以同时回写到表示系统误差的变量(比如UMI总数),避免我们把技术变量当成生物学信号来聚类。我个人的建议是,无论你后续用Seurat还是Scanpy,预处理环节直接用SCTransform,不要再用老一套的NormalizeData加FindVariableFeatures。

library(Seurat) library(SeuratData) # 读取空间数据 sp_data <- Load10X_Spatial(data.dir = "./filtered_feature_bc_matrix/", filename = "filtered_feature_bc_matrix.h5", assay = "Spatial") # QC指标计算 sp_data[["percent.mt"]] <- PercentageFeatureSet(sp_data, pattern = "^MT-") # 过滤 sp_data <- subset(sp_data, subset = nFeature_Spatial > 200 & nCount_Spatial > 500 & percent.mt < 20) # 标准化 sp_data <- SCTransform(sp_data, assay = "Spatial", verbose = FALSE)

预处理跑通之后,你会得到一套可以用于下游分析的归一化表达矩阵和降维结果。这时候就可以正式进入下一步——根据你的生物学问题选择分析模式了。

2. 为什么会有“三种分析模式”:科学问题决定分析路线

很多初学者最容易犯的错误,是拿到数据后直接套用单细胞的分析流程,做完聚类、UMAP画图之后就不知道下一步该干什么了。这背后的深层原因是没有理解空间转录组分析的“套路边界”——空间数据能回答的科学问题是有限的,而且不同问题的分析路径完全不同。

根据我自己的实战体会,空间转录组数据在绝大多数课题里回答的是以下三类问题:细胞类型在组织切片上如何分布(模式一)、组织微环境由哪些空间区域构成以及各区域的分子特征(模式二)、不同细胞或不同区域之间通过配体-受体等机制如何相互交流(模式三)。

这三类问题对应三种分析模式,核心逻辑分别是“映射已知”、“从头划分”和“关系推断”。

模式一的核心思路是:我手里已经有一套单细胞转录组数据(可能是同一个样本的,也可能来自公共数据库),我已经通过无监督聚类定义了细胞类型,现在要做的就是把这些细胞类型的标签“搬”到空间转录组的spot上,看看每种细胞在组织里长什么样。这种分析模式的关键词是“注释”和“映射”。

模式二的核心思路是:我暂时不管具体的细胞类型,而是把组织切片按照转录组表达模式的相似性划分成若干个区域(domain或niche),每个区域代表一个相对均质的状态。这种分析模式比较适合探索性研究,比如你想看看肿瘤组织里有没有免疫排斥型的区域结构,或者发育中的组织有哪些未被定义过的功能区域。它的关键词是“区域化”或“结构域”。

模式三的核心思路是:我关心的是“谁跟谁之间存在相互作用”。空间数据给了我们坐标信息,两个spot如果靠得很近,并且一个表达配体另一个表达受体,我们就有理由推断它们之间存在潜在的通讯关系。这种分析模式的关键词是“邻域”和“通讯”。

要注意的是,这三种模式不是互斥的,一个完整的课题通常会组合使用两到三种。比如先通过模式二识别出肿瘤边界区域,再通过模式一确认边界区域的细胞构成,最后用模式三分析边界区域中肿瘤细胞与免疫细胞的通讯关系。但如果你一开始没有想清楚自己的问题归属,很容易在中间步骤迷失方向,做出一些看起来很炫但实际解释不了生物学问题的图。

在后面三个章节里,我分别针对三种模式展开讲。

3. 模式一:基于参考注释的细胞类型映射

这种模式说白了就是做标签迁移。你有一组带注释的单细胞数据作为参考,要把这些标签映射到空间转录组的spot上。最常见的做法是使用Seurat的TransferData函数,整体思路是把两个数据集的共享基因锚定起来,然后通过典型相关分析找相似性。

先说说什么时候应该用模式一。如果你的课题目标是回答“某种细胞在组织里的空间分布是怎样的”,例如“CD8阳性T细胞在肿瘤组织里分布在边缘还是浸润到内部”,那你基本就是走模式一。它是三种模式里最成熟、也最容易出结果的一种。

但有一个前提条件容易踩坑:你的参考单细胞数据最好来自于同一个样本或者至少是同一个组织的相似样本。如果参考数据和空间数据来自完全不同的组织类型(比如拿胎肝的单细胞数据去注释成人肝组织的空间切片),迁移效果会大打折扣,甚至出现系统性的错误注释。我遇到过有同学用公共数据库里的数据直接做映射,结果把空间切片上所有上皮细胞都注释成了T细胞,原因就是参考数据里免疫细胞比例偏高,anchoring的时候产生了偏差。

实际操作时,我通常会把映射结果做一个“信心度”评估,不要只拿一个标签就往图上画。Seurat的TransferData会返回预测分数,建议把预测分数比较低的spot标记为“未定义”或者“低可信度”,而不是强行归到某一类。这一步虽然会增加一些后期处理的功夫,但对结果的可靠性提升非常明显。

# 参考单细胞数据 s_cell_ref,已包含细胞类型注释列 cell_type DefaultAssay(sp_data) <- "SCT" anchors <- FindTransferAnchors( reference = s_cell_ref, query = sp_data, normalization.method = "SCT", reference.reduction = "pcaproject", recompute.residuals = TRUE ) # 预测细胞类型 predictions <- TransferData( anchorset = anchors, refdata = s_cell_ref$cell_type, weight.reduction = sp_data[["pcaproject"]] ) # 合并预测结果 sp_data <- AddMetaData(sp_data, metadata = predictions)

映射完成后,一定要做两件验证的事情。第一,把注释结果画到组织切片上,肉眼检查不同细胞类型的空间分布是否符合组织学预期。比如上皮细胞应该主要集中在组织实质区,巨噬细胞可能更多分布在间质区或坏死边缘,如果你看到“心肌细胞”分布在大脑皮层切片的正中间,那大概率是注释出了问题。第二,抽几个核心marker基因做空间可视化,验证marker表达最强的区域是不是跟注释结果一致。比如你注释出了T细胞,那CD3DCD2这些基因的表达位置应该和你标注的T细胞spot区域高度重叠。

还有一个比较进阶但很实用的思路:如果手头没有匹配的单细胞数据,可以考虑用公共数据做参考,但必须先用Harmony或者CCA做跨数据集的批次校正。我实测过用不同平台(10x Chromium和Smart-seq2)的参考数据去映射spatial数据,Harmony校正后再做TransferData,比直接TransferData的准确率要高不少。不要嫌麻烦,这十几行代码有时候决定了你整个分析的成败。

4. 模式二:空间结构域识别与微环境分型

如果你拿到数据后脑子里想的是“这个组织里有哪些不同的功能区域”“肿瘤浸润边界和肿瘤核心在分子层面有什么差异”,那你需要的不是简单的标签迁移,而是从头对spot进行区域划分。这就是模式二要解决的问题。

空间结构域识别的思路本质上是一种带空间约束的聚类。传统的非空间聚类(比如Louveain或Leiden聚类)只考虑表达谱的相似性,不考虑位置信息,这在空间数据上会产生一个问题——同一个生物学区域可能被切碎成好几块,分散在切片的不同位置。为了解决这个问题,空间聚类算法会在聚类过程中加入一个空间约束项,让相邻的spot更倾向于被分为同一类。

目前最常见的两种工具是Seurat的FindSpatialClusters(实际上是对SCT变换后的表达数据进行加权的空间聚类)和BayesSpace。Seurat的实现相对快,适合跑通流程;BayesSpace则是基于贝叶斯统计的方法,引入了马尔可夫随机场来平滑空间上的聚类标签,效果通常更细更好,但速度慢一些,对计算资源有一定要求。

我自己在实践里的做法是:先用Seurat跑一遍快速的空间聚类,看一下大概的区域结构;如果有比较强的区域边界信号,再上BayesSpace做细化。两个结果对比着看,选一个跟组织形态更吻合的结果作为最终的区域定义。

# 使用 BayesSpace 识别空间结构域 library(BayesSpace) # 转换 Seurat 对象为 SingleCellExperiment sce <- as.SingleCellExperiment(sp_data) # 设置空间邻接信息,spatialLocation 是 spot 坐标 set.seed(100) sce <- spatialPreprocess(sce, platform = "Visium", n.PCs = 15) # 指定聚类数 k,通常先用较小值探索 sce <- spatialCluster(sce, q = 7, platform = "Visium", nrep = 5000, burnin = 1000) # 拿到聚类结果 spatial_cluster <- colData(sce)$spatial.cluster

BayesSpace里有一个比较关键的超参数——聚类数q。这个数字怎么定?我的经验是分两步:先跑非空间聚类的Leiden,看轮廓系数和分群稳定性,得到一个大致的簇数范围;然后用这个范围附近的几个q值分别跑BayesSpace,比较不同q下的聚类结果在组织切片上的分布是否合理,以及各个结构域之间的差异表达基因是否有生物学意义。不要盲目追求大的q值,结构域越多,单个结构域的样本量越小,后续差异分析的统计功效会变得很弱。

结构域识别完之后,下一步通常是做区域间的差异表达分析,找每个结构域的标记基因。这里有个建议:用FindAllMarkers默认参数跑出来的结果有时会包含一些核糖体蛋白基因或热休克蛋白基因,这些往往反映的是细胞活性状态的差异,而不是区域身份特征。你可以通过设定features排除这些基因,或者在后续分析里特别关注那些已知跟组织功能相关的基因。否则你画出来的图虽然很热闹,但实际上解释不了任何生物学问题。

区域分型的下游还有两个比较常见的延伸方向:一是做“结构域之间的轨迹分析”,比如从正常组织区域到肿瘤区域的过渡区域,看看基因表达有没有渐进式的变化趋势;二是结合临床信息做“结构域组成比例与预后”的分析,比如某个免疫结构域的丰度是否跟患者生存相关。这些方向做出来都是不错的课题亮点。

模式二最忌讳的是把聚类结果当成终点。识别出十个结构域,这只是起点。关键是你能否给每个结构域一个生物学身份的命名,比如“富血供区域”“免疫排斥区域”“增殖活跃区域”。这个命名的过程需要结合marker基因、通路富集分析、组织形态学验证,三管齐下才能让人信服。

5. 模式三:配体-受体互作与空间通讯推断

第三种分析模式是最能体现空间转录组“空间价值”的部分,因为如果你只有单细胞数据,做配体-受体互作分析时是缺乏空间约束的——两个细胞群虽然在转录组层面表达了配体和受体,但在组织里可能根本相距十万八千里。空间数据天然解决了这个问题:spot之间的物理距离就是最直接的约束条件。

核心思路并不复杂:先定义“细胞类型A和细胞类型B在空间上是相邻的”,然后检查A是否表达配体L、B是否表达受体R,最后通过统计检验判断这种配受体共表达是否显著地富集在相邻的spot对之间。听起来不难,但实际操作中有几个关键问题。

第一个问题是“什么是相邻”。10x Visium的spot之间间距是固定的(spot中心距100微米),一般定义相邻spot为“切比雪夫距离为1”的六个邻近spot。如果你的分析用的是更高分辨率的平台(比如Stereo-seq),邻域的定义可能需要调整。最稳妥的方式是先对你的数据跑一下FindSpatialNeighbors,把邻接矩阵建好,再结合你的平台特点设定邻域范围。

第二个问题是配体受体数据库的选择。目前主流的选择有CellPhoneDB(基于已知的配受体互作关系)和CellChat(有内置的文献支撑的通讯网络数据库)。空间转录组分析里我更常用CellChat,因为它提供了将空间位置信息纳入通讯概率计算的函数,可以直接接受Seurat对象作为输入,使用起来非常顺手。

library(CellChat) # 准备 CellChat 对象,meta 包含细胞类型/结构域注释列 cellchat <- createCellChat(object = sp_data, group.by = "cell_type", assay = "Spatial") cellchat@DB <- CellChatDB.human # 识别过表达配体受体基因 cellchat <- subsetData(cellchat) cellchat <- identifyOverExpressedGenes(cellchat) cellchat <- identifyOverExpressedInteractions(cellchat) # 推断空间近邻关系中的通讯概率 cellchat <- computeCommunProb(cellchat, type = "triMean") # 聚合通讯网络 cellchat <- aggregateNet(cellchat)

关于结果解读,一个特别容易犯的错误是只看配体受体表达量就下结论。即使两个spot相邻,一个spot表达了配体,另一个spot表达了受体,也不能直接说两者“一定”存在通讯。空间转录组的分辨率决定了配体受体可能来自同一个spot里的两个不同细胞,而不是来自两个不同spot。换句话说,共定位是通讯的前提,但不等于通讯本身。要想把结论做扎实,至少需要补充蛋白层面的证据(比如免疫荧光共染色)或者通路下游靶基因的激活证据。

另一个很实用的思路是把模式三和模式二组合起来用,而不是直接跳到细胞类型水平做通讯分析。我的习惯是先用BayesSpace识别出结构域,然后把结构域之间的通讯关系画成一个网络图。这样做的优势是,结构域级别的通讯分析稳定性远高于spot级别,而且结果更便于跟组织形态学对照。你可以在图上看到“肿瘤核心区域”如何通过某些配受体通路“招募”免疫细胞到周边区域,这种宏观视角恰恰是审稿人比较认可的呈现方式。

如果你做的是肿瘤相关课题,我强烈推荐关注“巨噬细胞-肿瘤细胞”互作中的MIF信号通路。很多空间数据里这条通路的活性都很高,但CellChat默认有时候不会提示它,需要手动查看。另外,SEMA3家族和PTN通路也可能在空间通讯分析中反复出现,如果看到不要惊讶,这是很多实体瘤组织的共性信号。

6. 三种模式的整合流程与常见坑位速查

讲到这里,三类模式的逻辑和实操重点都过了一遍。但现实中的课题很少只用到单一种模式,更常见的是一个完整的数据分析流程里,三种模式各司其职、环环相扣。这里我给出一个我自己比较常用的整合分析流程,以及这一路跑下来总结出的常见问题和避坑心得。

6.1 一个完整的组合分析流程参考

第一步,先跑模式二,对空间转录组切片做结构域识别。这个过程中你对该组织有哪些大块区域、边界在哪、区域之间的表达差异有多大,会有一个全局的印象。

第二步,如果手头有匹配的单细胞数据,跑模式一,把细胞类型标签映射到每个spot上。做完之后把细胞类型比例叠加到结构域上,你就能看到每个结构域主要由哪些细胞构成。这一步相当于把“区域”和“细胞”两层信息接上了。

第三步,综合前两步的结果,筛选出你关心的结构域或细胞类型组合,做模式三的通讯分析。比如发现一个免疫排斥型结构域,那就分析这个结构域里的肿瘤细胞通过哪些配受体通路抑制了T细胞浸润。

最后,所有的分析结果都要回到切片图像上做可视化。空间转录组的一个显著优势就是结果可以做漂亮的可视化,既然有这个优势,不要浪费。SpatialDimPlotSpatialFeaturePlot这些函数画出来的图,只要调好配色,直接能放论文。

6.2 常见问题与排查思路

问题现象可能原因排查与解决办法
聚类结果在空间上呈现“椒盐状”散点分布聚类时未加入空间约束,普通Leiden导致的换成BayesSpace等空间聚类算法;检查邻接矩阵是否构建正确
标注的细胞类型在空间分布上没有逻辑参考数据与空间数据组织类型不匹配核对参考数据来源,做Harmony批次校正;检查预测分数低的比例高不高
配体受体分析结果信号过于杂乱,到处都是未设定合理的邻域范围调整邻接矩阵的构建参数,尝试减少邻域范围;只在特定结构域内部做通讯分析
肿瘤组织切片里spot的UMI数普遍偏低组织透化时间的优化出了问题,或者切片选得不好回到湿实验环节,重新优化透化时间;UMI低的区域在后续分析里标记为低质量区域
用公共单细胞数据做映射时出现系统性错误参考数据里的细胞类型构成跟空间数据差距过大增加参考数据的样本量,或者改用多数据集整合后再做映射

6.3 关于平台选择和计算资源的一点经验

文章开头我主要以10x Visium为例,但其实现在可选的空间转录组平台越来越多,包括华大的Stereo-seq、Nanostring的CosMx、Vizgen的MERSCOPE等等。这些平台在分辨率上远超Visium,但分析思路的底层逻辑是相通的。如果你用的是超高分辨率平台,模式一的标签迁移基本可以做到单细胞级别,模式二的结构域识别会更精细,模式三的邻域定义则需要参考实际的细胞密度做调整。

还有一个经常被忽视的点是计算资源。空间转录组数据比单细胞数据要重得多,一张切片往往就要占用十几个G的内存。跑BayesSpace或者大范围的配体受体分析时,建议至少准备32G内存的服务器,否则很容易跑一半卡死。如果只有个人电脑,我的建议是优先跑Seurat流程,BayesSpace可以用,但把nrep参数调低一点(比如2000)。不是每个分析都值得全量跑,很多时候一个切片的分析够了,不用硬上多个生物学重复的全量数据——先在一个切片上把你的分析流程打磨好,再批量跑其他样本。

7. 写在最后:从“跑通脚本”到“问对问题”

空间转录组分析工具更新得很快,今天流行的函数可能半年后就半废弃了,但三种分析模式背后的逻辑是非常稳定的。细胞类型映射、结构域识别、空间通讯推断,无论工具怎么迭代,你最终要做的都是在回答这三个层面的问题。

我自己踩过最大的一个坑,是早期拿到数据后迫不及待地想用“最新的算法”跑一种看起来很高端的分析,结果输出的图表面很美,但跟生物学问题对不上,浪费了一个多星期的时间才回头重新梳理思路。所以我在带新人的时候,都会先让他们把要回答的科学问题写在一张纸上,然后用自己的话讲清楚属于哪种分析模式,最后才开始写代码。这个习惯救了不少项目的命。

如果你手头正好有一批空间转录组数据,我建议你也试试这个方法:先定义问题,再选模式,最后才是抠代码。等三种模式都各跑过一遍,你大概就会有一种感受——空间转录组最好玩的地方在于它逼着你去思考组织的空间结构如何决定功能,这种“空间思维”一旦建立起来,对你的科研思路绝对是有长远帮助的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 15:06:45

Arnis 上手指南:5步把家乡地理转Minecraft

Arnis 上手指南&#xff1a;5步把家乡地理转Minecraft 【免费下载链接】arnis Generate any location from the real world in Minecraft with a high level of detail. 项目地址: https://gitcode.com/GitHub_Trending/ar/arnis 想在游戏里走回上学的路&#xff0c;却发…

作者头像 李华
网站建设 2026/9/9 15:06:37

Matlab多目标布谷鸟算法:成本时间质量三目标优化Pareto前沿实现

直接上结论&#xff1a;如果用Matlab做多目标优化&#xff0c;而且目标函数是成本、时间、质量这三个互相打架的指标&#xff0c;布谷鸟算法&#xff08;Cuckoo Search&#xff0c;简称CS&#xff09;是性价比很高的解法。去年我帮一个做精密零部件加工的团队写排产模块&#x…

作者头像 李华
网站建设 2026/9/9 15:06:08

JPEG解码实战:从libjpeg-turbo到自研Decoder的完整指南

简介&#xff1a;这是一份用C实现JPEG/JPG图像从压缩数据恢复像素解码过程的实例工程&#xff0c;面向图像处理初学者和希望掌握解码原理的程序员。代码围绕JPEG有损压缩的回放流程展开&#xff0c;从SOI/SOF/DQT/SOS块解析、霍夫曼解码、反量化&#xff0c;到IDCT与YCbCr转RGB…

作者头像 李华
网站建设 2026/9/9 15:04:50

数据库主键与外键约束详解:从核心原理到工程实践

数据库管理系统&#xff08;DBMS&#xff09;里最容易被忽视、又最容易踩坑的&#xff0c;其实是约束。尤其主键和外键&#xff0c;这两样东西是表结构设计的“地基”。没有主键&#xff0c;一行数据没有唯一身份&#xff1b;没有外键&#xff0c;表和表之间只是看起来有关联&a…

作者头像 李华
网站建设 2026/9/9 15:04:43

老Mac安装新版macOS:一份OpenCore Legacy Patcher操作手册

老Mac安装新版macOS&#xff1a;一份OpenCore Legacy Patcher操作手册 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 这份手册带你在 2007–2017 年的 Intel…

作者头像 李华
网站建设 2026/9/9 15:04:29

在ARM平板上启动Windows兼容系统:ReactOS ARM移植完整实战指南

在ARM平板上启动Windows兼容系统&#xff1a;ReactOS ARM移植完整实战指南 【免费下载链接】reactos A free Windows-compatible Operating System 项目地址: https://gitcode.com/GitHub_Trending/re/reactos 家里吃灰的旧安卓平板&#xff0c;还能不能变回一台"小…

作者头像 李华