单细胞系列教程:细胞聚类(十)

导读

前面我们已经整合了高质量的细胞,现在我们想知道细胞群中存在的不同细胞类型 ,因此下面将进行细胞聚类分析

学习目标

  1. 描述评估用于聚类的主成分数量的方法
  2. 根据重要的主成分对细胞进行聚类

1. 目标

  • 生成特定细胞类型的簇并使用已知细胞类型的标记基因来鉴定簇的身份。
  • 确定簇是否代表真正的细胞类型或是由于生物学或技术变异而产生的簇,例如细胞周期 S 期的细胞簇、特定批次的簇或具有高线粒体含量的细胞簇。

2. 挑战

  • 生物或技术问题可能会导致鉴定出质量差的簇
  • 识别每个簇的细胞类型
  • 需要保持耐心,因为这可能在聚类和标记基因识别之间进行重复(有时甚至会回到 QC 过滤步骤)

3. 推荐

  • 在执行聚类之前,对您对存在的细胞类型有一个很好的了解。了解您是否期望细胞类型复杂性较低或线粒体含量较高,以及细胞是否正在分化。
  • 如果您有多个条件的数据,执行整合步骤通常很有帮助。
  • 如果需要并且有实验条件,则回归 UMI 的数量(默认情况下使用 sctransform)、线粒体含量和细胞周期。
  • 识别任何无用簇以进行删除或重新进行QC 过滤。无用簇可能包括那些具有高线粒体含量和低 UMI/基因的簇。如果由许多细胞组成,则返回利用 QC 过滤掉,然后重新整合/聚类可能会有所帮助。
  • 如果没有将所有细胞类型检测为单独的簇,请尝试更改分辨率或 PC 数量。

4. Set up

在开始之前,创建一个名为 clustering.R 的新脚本。

接下来,让我们加载需要的所有库。

# 单细胞聚类

# 加载包
library(Seurat)
library(tidyverse)
library(RCurl)
library(cowplot)

5. PCs 鉴定

为了克服 scRNA-seq 数据中任何单个基因表达中的广泛技术噪音,Seurat根据从整合的最可变基因的表达中获得的 PCA分数将细胞分配到簇种,每个 PC 基本上代表一个“metagene”,结合相关基因集的信息。因此,确定要在聚类步骤中包含多少 PC 对于确保我们捕获数据集中存在的大部分变异或细胞类型非常重要。

在决定哪些 PC 用于下游聚类分析之前,对 PC 探索很有用。

(a) 探索 PC 的一种方法是使用热图来可视化选定 PC 的最多变异基因,其中基因和细胞按 PCA 分数排序。这里的想法是查看 PC 并确定驱动它们的基因对于区分不同的细胞类型是否有意义。

cells参数指定用于绘图的具有最高负或正 PCA 分数的细胞数。

# 利用热图探索 PCs
DimHeatmap(seurat_integrated, 
           dims = 1:9, 
           cells = 500, 
           balanced = TRUE)

如果我们想探索大量的PC,这种方法可能会很慢并且难以可视化单个基因。同样,为了探索大量 PC,我们可以通过驱动 PC 的 PCA 分数打印出前 10 个(或更多)阳性和阴性基因。

# 打印出驱动 PC 的可变基因
print(x = seurat_integrated[["pca"]], 
      dims = 1:10, 
      nfeatures = 5)

(b) elbow图是确定用于聚类 PC 数量的另一种有用方法,以便我们捕获数据中的大部分变化。elbow图可视化了每个 PC 的标准偏差,我们正在寻找标准偏差开始稳定的位置。本质上,elbow出现的位置通常是识别大部分变化的阈值。但是,这种方法可能非常主观。

让我们使用前 40 PCs 绘制elbow图:

# 绘制 elbow 图
ElbowPlot(object = seurat_integrated, 
          ndims = 40)

基于此图,我们可以通过elbow出现在 PC8 - PC10 附近的位置粗略确定大部分变化,或者有人可能认为应该是当数据点开始接近 X 轴时,PC为30 左右。这让我们对需要包含的 PC 数量有了一个非常粗略的了解,我们可以以更准确的方式提取此处可视化的信息,这可能更可靠一些。

虽然上述 2 种方法通常与 Seurat 的旧方法一起用于标准化和识别可变基因,但它们不再像以前那样重要。这是因为 SCTransform 方法比旧方法更准确。

  • 为什么选择 PC 对旧方法更重要?

较旧的方法将一些变异的技术来源结合到一些较高的 PC 中,因此 PC 的选择更为重要。SCTransform 可以更好地估计方差,并且不会经常在更高的 PC 中包含这些技术变异来源。

理论上,使用 SCTransform,我们选择的 PC 越多,执行聚类时考虑的变化就越多,但是执行聚类需要更长的时间。因此,对于此分析,我们将使用前 40 PCs 来生成细胞簇。

6. 聚类

Seurat 使用基于图的聚类方法,将细胞嵌入到图结构中,使用 K 近邻 (KNN) 图(默认情况下),在具有相似基因表达模式的细胞之间绘制边缘。然后,它试图将该图划分为高度互连的quasi-cliques”或communities.

我们将使用 FindClusters()函数来执行基于图的聚类。分辨率是设置下游聚类granularity的一个重要参数,需要单独进行优化。对于 3,000 - 5,000 个细胞的数据集,设置在 0.4-1.4 之间的分辨率通常会产生较好的聚类结果。增加的分辨率值会导致更多的簇,这对于更大的数据集通常是必需的。

FindClusters() 函数允许我们输入一系列分辨率,并将计算聚类的granularity。这对于测试哪个分辨率更合适,非常有帮助,而无需为每个分辨率单独运行该函数。

# 确定 K 近邻图
seurat_integrated <- FindNeighbors(object = seurat_integrated, 
                                dims = 1:40)

# 确定各种分辨率的簇
seurat_integrated <- FindClusters(object = seurat_integrated,
                               resolution = c(0.4, 0.6, 0.8, 1.0, 1.4))

如果我们查看 Seurat 对象的元数据(seurat_integrated@meta.data),则计算出的每个不同分辨率都有一个单独的列。

# 分辨率探索
seurat_integrated@meta.data %>% 
        View()

开始选择的分辨率,我们通常会选择范围中间的值,例如 0.6 或 0.8。我们将从 0.8 的分辨率开始,使用 Idents()函数分配簇的标识。

# 分配簇的标识
Idents(object = seurat_integrated) <- "integrated_snn_res.0.8"

为了可视化细胞簇,有一些不同的降维技术可能会有所帮助。最流行的方法包括 t-SNEUMAP 技术。

这两种方法都旨在将具有相似局部邻域的细胞从高维空间降至低维空间中。这些方法将要求您输入用于可视化的 PCA 维度的数量,我们建议使用相同数量的 PC 作为聚类分析的输入。在这里,我们将继续使用 UMAP 方法来可视化细胞簇。

# UMAP的计算 
# seurat_integrated <- RunUMAP(seurat_integrated, 
#                  reduction = "pca", 
#                  dims = 1:40)
# UMAP 可视化
DimPlot(seurat_integrated,
        reduction = "umap",
        label = TRUE,
        label.size = 6)

探索其他分辨率也很有用。它将让您快速了解簇将如何根据分辨率参数发生变化。例如,让我们切换到 0.4 的分辨率:

# 分配簇的标识
Idents(object = seurat_integrated) <- "integrated_snn_res.0.4"

# UMAP 可视化
DimPlot(seurat_integrated,
        reduction = "umap",
        label = TRUE,
        label.size = 6)

本文转载于网络 如有侵权请联系删除

相关文章

  • 视频会议、WebRTC及RingCentral解决之道

     //  编者按:最近几年视频会议产品得到了极大的关注和快速的发展。产品的用户体验,功能和质量决定了产品能否在竞争中脱颖而出。而如何选择一个好的架构和解决方案是最为关键的因素。本次分享将分为几大部分:第一部分介绍视频会议产品的历史以现状,以及主要的功能要素。第二部分将介绍基于WebRTC的解决方案以及优缺点,以及主要的挑战。第三部分介绍RingCentral的视频会议系统的解决方案,以及主要技术优势。希望通过分享,大家对于如何打造一款优秀的视频会议产品在架构选择和技术选型上能有一定的收获。文/何必苍整理/LiveVideoStack大家好,我今天演讲的主题是关于视频会议,WebRTC以及RingCentral的解决之道。本次演讲大概分为六部分。首先,介绍下个人及公司,再聊下视频会议产品发展及趋势,之后会讲一些主流的网络视频会议解决方案,紧接着说下基于WebRTC的解决方案及挑战,最后详细谈下RingCentral是如何解决这些问题以及它的架构。1、个人及公司介绍按照惯例,我先简单介绍下我自己以及公司。我在RingCentral担任视频与媒体研发高级总监,同时我也是杭州研发中心负责人,负

  • 2022年首届“兴智杯”全国人工智能创新应用大赛正式启动

    2022年8月4日上午,首届“兴智杯”全国人工智能创新应用大赛(以下简称“大赛”)正式启动。大赛由工业和信息化部、科学技术部及深圳市人民政府共同主办,中国信息通信研究院、中国科学技术信息研究所、深圳市工业和信息化局、深圳市龙华区人民政府联合承办。大赛以“兴智赋能”为主题,旨在吸引国内外优秀人工智能创新人才参与,聚焦技术创新和应用赋能面临的痛点、难点,加速人工智能技术创新和工程化落地,推动人工智能与实体经济融合赋能水平。启动仪式以线上方式举行,工业和信息化部副部长徐晓兰,深圳市人民政府市长覃伟中,广州市人民政府市长郭永航以及上海市委常委、临港新片区党工委书记、管委会主任陈金山出席并致辞。潘云鹤、徐宗本、鄂维南等院士专家出席并致贺词,中国信息通信研究院院长余晓晖介绍大赛总体情况,中国科学技术信息研究所所长赵志耘宣读专家委员会名单,百度、阿里巴巴、华为、云从科技、深势科技等企业代表发表主题演讲。启动仪式的第一阶段由工业和信息化部科技司司长谢少锋主持,第二阶段由中国信息通信研究院副总工程师王爱华主持。在领导致辞环节,徐晓兰指出,近年来,我国人工智能产业发展取得显著进展。人工智能核心产业规模超过

  • ECCV2020 | CPNDet:Anchor-free+两阶段目标检测思想,先找关键点再分类

    这篇文章收录于ECCV2020,是作者团队是:国科大、华为、华中科大、鹏城实验室。是一篇关于Anchor-free的两阶段目标检测网络,效果可达49.2%AP,在准确率和召回率等性能上优于CenterNet、FCOS等网络,并且模型的推理速度较快。整体的思路,可以说有一点点无聊,不过当作个水文看看还是可以的。论文地址:https://arxiv.org/abs/2007.13816.pdf代码地址:https://github.com/Duankaiwen/CPNDet通常,目标检测算法的目标是确定图像中目标对象的类别和位置。本文提出了一种新颖的anchor-free两阶段框架,该框架首先通过查找可能的角点关键点组合来提取多个候选目标objectproposals,然后通过独立的分类阶段为每个候选object分配一个类别标签。实验证明了这两个阶段分别是提高召回率和准确率的有效解决方案,同时这两个阶段可以集成到端到端网络中。本文的方法被称为“CornerProposalNetwork(CPN)”,它具有检测各种scales尺度的目标的能力,并且还避免了被大量false-positivep

  • 图片隐写的小试牛刀

    无意拿到一个图片隐写的题目,纯分享让你更直观了解图片隐写的解题套路1.开局一张图,保存图片为ds.jpg2.根据提示对网站进行信息搜集,先用dirb直接对网站进行简单扫描3.扫出两个sitemap.xml和pass.txt两个文件,保存字典文件为pass.txt4.结合字典的隐写题的思路有steghide、F5、outguess等加密,逐一尝试5.利用steghide解密(1)安装steghideapt-getinstallsteghide(2)python编写结合获取的密码字典遍历验证(Python2语法编写的)#-*-coding:utf8-*- fromsubprocessimport* deffoo(): stegoFile='ds.jpg' extractFile='hide.txt' passFile='pass.txt' errors=['couldnotextract','steghide--help','Syntaxerror'] cmdForm

  • 训练GAN的16个trick

    本文转载自:https://mp.weixin.qq.com/s/d_W0O7LNqlBuZV87Ou9uqw新智元公众号本文来自ICCV2017的Talk:如何训练GAN,FAIR的研究员SoumithChintala总结了训练GAN的16个技巧,例如输入的规范化,修改损失函数,生成器用Adam优化,使用Sofy和Noisy标签,等等。这是NIPS2016的SoumithChintala作的邀请演讲的修改版本,而2016年的这些tricks在github已经有2.4k星。ICCV2017slides:https://github.com/soumith/talks/blob/master/2017-ICCV_Venice/How_To_Train_a_GAN.pdfNIPS2016:https://github.com/soumith/ganhacks训练GAN的16个trick#1:规范化输入将输入图像规范化为-1到1之间生成器最后一层的输出使用tanh函数(或其他boundsnormalization)#2:修改损失函数(经典GAN)在GAN论文里人们通常用min(log1-D)

  • 机器人绘画大赛作品一览,一点都不人工智障

    郭一璞发自蒸笼in北京 量子位报道|公众号QbitAI“虽然AI会在写PPT、做报表这些工作中取代人类,但是在艺术创作领域,AI还是赶不上人类的。”担心被AI搞失业的你是不是经常听到这种论调?是不是担心有一天,没有艺术天分的你也要被迫学习钢琴、绘画或是雕塑了?如果你这么想的话,那就要告诉你一个好消息了:飞速发展的AI技术不会让你被迫学艺术,因为,AI自己就比你强哈哈哈哈哈。比如绘画领域。机器人们已经可以创作油画作品了,而且,可能画得不比美术特长生们差。人像or风景,写实or抽象,全流派get先来欣赏一下机器人的绘画作品吧。风景画:人像:动物:抽象和写实的静物:还有大概是印象派的风景?注意,这些画不是单纯用模型生成的,而是机械臂学会之后,蘸着颜料一笔一画自己画出来的。上面这些画作都是Robotart机器人绘画比赛参赛团队的作品。该比赛从2016年开始已经连续举办了三年,创立者是斯坦福机械工程设计博士AndrewConru,一位斜杠青年,他既是个工程师,也是个业余艺术家,主业在圣克拉拉大学教控制系统,爱好则是油画。其他博士教授们的博客上都是论文,Conru博士的博客里则全都是自己的绘画作品

  • 秋招回馈帖——大佬倾情分享

    作者:linkinparkzlz来源:牛客网楼主是普通985本科,最后签约的是蚂蚁金服,过几天就要去正式上班了,秋招拿到6,7个offer,一直想写一个如何准备秋招的经验贴,不是为了吹嘘拿了多少offer,而是希望能够真正帮助到一些同学,少走些弯路。但是如果有不合理的地方,请大家轻喷,也请在评论区多留点建议。以下是正题。关于时间开始时间 秋招提前批一般七月半就开始了。去年我记得比较早的是阿里,很早就开始内推。后面其他公司就陆续开始了。我觉得开始没有必要太着急找内推,其实现在内推的人很多,不用担心没得机会。开始有可能要求要高一些,而有些公司面试是有记录的,即使有些会说不影响网申(比如阿里),但是阿里每次面试都在一个系统中有记录,阿里系用的都是一个系统,也就是说你以后的面试面试官都会看到你前面的面试评价(保留意见)。结束时间 根据我自己的经验来说,秋招基本一致持续,一直到次年的1月或者2月(或者有人叫做春招),也就是说,在这段很长的时间内一直都有机会。2.关于内推内推是很重要的,大部分公司内推都会免笔试,这会大大增加成功的概率。内推一定要找靠谱的学长学姐,最好有联系方式的,这样能够随时掌握

  • 塔说 | 如何理解深度神经网络中的泛化理论?

    前言近年来的深度神经网络研究进展往往都重方法而轻理论,但理论研究能够帮助我们更好地理解深度学习成功背后的真正原因,并有望为进一步的研究指明方向。近日,普林斯顿大学计算机科学教授SanjeevArora发表博文介绍了在深度网络泛化上的理论。深度学习的理论还存在诸多神秘之处。近来很多机器学习理论研究者都在关注神秘的泛化(generalization):为什么训练后的深度网络能在之前并未见过的数据上取得良好的表现,即便它们的自由参数的数量远远超过了数据点的数量(经典的「过拟合」情况)?张驰原等人的论文《理解深度学习需要重新思考泛化(UnderstandingDeepLearningrequiresRethinkingGeneralization)》为这一难题带来了一些关注。论文地址:https://arxiv.org/abs/1611.03530。他们的主要实验发现是:如果你在带有随机标签的图像上训练一个经典的卷积网络架构(比如Alexnet),那么你仍然可以在这些训练数据上实现非常高的准确度。(此外,人们认为有助于实现更好的泛化的常见正则化策略其实帮助不大。)不用说,这个训练后的网络之后并

  • mysqldump数据导出问题和客户端授权后连接失败问题

    1,使用mysqldump时报错(1064),这个是因为mysqldump版本太低与当前数据库版本不一致导致的。 mysqldump:Couldn'texecute'SETOPTIONSQL_QUOTE_SHOW_CREATE=1':YouhaveanerrorinyourSQLsyntax;checkthemanualthat correspondstoyourMySQLserverversionfortherightsyntaxtousenear'OPTIONSQL_QUOTE_SHOW_CREATE=1'atline1(1064)[root@bastion-IDC~]#mysqldump--version mysqldumpVer10.13Distrib5.1.61,forredhat-linux-gnu(x86_64)[root@bastion-IDC~]#mysql          //或者登陆mysql,selectversion();也可查看版本 Serverversion:5.6.25-logSourcedistrib

  • ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)

    ASP.NETMVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需要将相应的ValidationAttribute应用到Model的类型或者属性上即可。对于自定义验证,我们也只需要定义相应的Validation就可以了,不过服务端验证比较简单,而客户端验证就要稍微复杂一些,本文提供一个简单的实例说明在ASP.NETMVC中实现自定义验证的基本步骤。[源代码从这里下载]一、AgeRangeAttribute用于验证出生日期字段以确保年龄在制定的范围之内的AgeRangeAttribute定义如下,简单起见,我们直接让它直接继承自RangeAttribute。服务端验证逻辑定义在重写的IsValid方法中,并且重写了FormatErrorMessage方法以便生成针对年龄的验证消息。AgeRangeAttribute实现了IClientValidatable接口,并在实现的GetClientValidationRules方法中生成客户端验证规则。在生成的类型为“agerange”的ModelClie

  • 基础的递归数列「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。/*copyright(c)2013,烟台大学计算机学院 *Allrightsreserved. *作者:赵振凯 *完成日期:2013年11月20日 *版本号:v1.0 *问题描述:基础的递归数列 */ #include<iostream> usingnamespacestd; voidf(int); intmain() { inti=1234; f(i); return0; } voidf(intn) { if(n==0) return; else { f(n/10); cout<<n%10; return; } }复制运行结果:版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至举报,一经查实,本站将立刻删除。发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/194778.html原文链接:https://javaforall.cn

  • Centos安装MySQL5.7

    在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB。1下载并安装MySQL官方的YumRepositorywget-i-chttp://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm复制使用上面的命令就直接下载了安装用的YumRepository,大概25KB的样子,然后就可以直接yum安装了。yum-yinstallmysql57-community-release-el7-10.noarch.rpm复制之后就开始安装MySQL服务器。yum-yinstallmysql-community-server复制这步可能会花些时间,安装完成后就会覆盖掉之前的mariadb。 至此MySQL就安装完成了,然后是对MySQL的一些设置。2MySQL数据库设置 首先启动MySQLsystemctlstartmysqld.service复制查看MySQL运行状态,运行状态如图:systemctlstatusmysqld.

  • CyanogenMod wiki reading tips | Android tips

    ToEnabletheDeveloperandPerformancesettingsonCyanogenMod10.1 IntheSettingsapp,choosetheAboutPhone(orAboutTablet)option.Scrolldown,andtaptheBuildnumberseventimes.Ontheseventhtap,youwillbenotifiedthat"Youarenowadeveloper."ReturnbacktothemainSettingsmenu.TheDeveloperoptionsandPerformancesettingsshouldnowbevisible. NOTETHISISTHESAMETRICKWHICHAOSPUSES: Note:OnAndroid4.2andnewer,Developeroptionsishiddenbydefault.Tomakeitavailable,gotoSettings>AboutphoneandtapBuildnumberseventimes.Returntotheprevious

  • 【电影影评】我的电影短评

    一个一个开随笔太蠢了,都集合到这里吧.反正都很短   1.失眠 看完全片。实在是无力吐槽。 结构上,简直是一团乱麻。整个影片被强行分成了两个部分。但是很明显,抗日的部分没有叙述这么长的必要。 其他的,都比较无聊。 我给6分。   2.大护法 首先,好不好,好! 好在哪里?暗喻多. 但是不得不说,这种电影不适合抓细节,很多人好奇的细节,其实根据电影内容,是无法推断出来的.所以其实很多细节是为第二部准备,很多人过度解读了. 所以这部电影要看内核,但是内核每个人看到的不一样吧.我看到的是被压迫者的愚昧和反抗者的理想主义. 国外电影的话,7分多吧.国内考虑到审核和小成本,确实应该加点分. 我给8分~8.5分.

  • socket

    socket socket通常称为'套接字',用于描述ip地址和端口,是一个通信链的句柄,应用程序通常通过'套接字'向网络发出请求或者应答网络请求. socket起源于Unix,Unix/Linux基本哲学之一就是'一切皆文件',对于文件用[打开][读写][关闭]模式来操作.socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO,打开,关闭) socket和file的区别:   file模块是针对某个指定文件进行[打开][读写][关闭]   socket模块是针对服务器端和客户端进行[打开][读写][关闭] 客户端:cs架构,client->server 浏览器:bs架构,browser->server 基于socket模块实现网络通信   python2,send/recv发送的都是字符串   python3,send/recv发送的都是字节(需要将发送的信息转换为字节) 阻塞:   服务端:     accept,阻塞:等待客户端来连接     recv,   阻塞:等待客户端发

  • java调用存储过程

    这段时间开始学习写存储过程,主要原因还是因为工作需要吧,本来以为很简单的,但几经挫折,豪气消磨殆尽,但总算搞通了,为了避免后来者少走弯路,特记述与此,同时亦对自己进行鼓励。 一:无返回值的存储过程 存储过程为: CREATEORREPLACEPROCEDURETESTA(PARA1INVARCHAR2,PARA2INVARCHAR2) AS BEGIN   INSERTINTOHYQ.B_ID(I_ID,I_NAME)VALUES(PARA1,PARA2); ENDTESTA; 然后呢,在java里调用时就用下面的代码: packagecom.hyq.src;   importjava.sql.*; importjava.sql.ResultSet;   publicclassTestProcedureOne{  publicTestProcedureOne(){  }  publicstaticvoidmain(String[]args){    Stringdriver="

  • UOS如何访问Windows共享目录

    1、在UOS桌面,打开任意的文件夹管理器,在最上面的路径处,点击右键,选择编辑地址 2、然后将共享的Windows地址填上,格式为:smb://IP[共享机器的IP地址],然后点击回车即可   3、输入对应的共享的账号密码   4、将会显示出来对应共享文件夹目录     5、查看目录,即可看到对应的共享文件了    

  • Java实现网络爬虫 案例代码

    Java实现网络爬虫案例代码 需求说明 搭建开发环境,实现《三国演义》全文保存在本地   步骤分析 访问网址:http://www.shicimingju.com/book/sanguoyanyi.html 分析网站URL、文档内容特征 获取网页内容 拆分出需求内容 保存在本地   案例代码 importus.codecraft.webmagic.Page;importus.codecraft.webmagic.Site;importus.codecraft.webmagic.Spider;importus.codecraft.webmagic.pipeline.ConsolePipeline;importus.codecraft.webmagic.pipeline.FilePipeline;importus.codecraft.webmagic.pipeline.JsonFilePipeline;importus.codecraft.webmagic.processor.PageProcessor; publicclassNovelRepoPageProcesso

  • 暑假学习进度记录墙

    7.16-7.20基本Java语法CSSHTMLJSPython入门 7.21: Django入门,

  • decltype类型指示符

    decltype(exp) 1.使用的表达式exp是一个变量 exp是一个变量的时候,返回的是变量本身的类型(尤其注意引用类型) 例如: constintci=0,&cj=ci; decltype(ci)x=0;//x是constint类型 decltype(cj)y=x;//y是constint&类型,绑定到x上,引用类型必须初始化 decltype(cj)z;//这是错误的写法,因为z是constint&类型,是引用类型,必须初始化 2.使用放表达式不是一个变量 使用的表达式不是一个变量的时候返回的是表达式计算结果的类型 例如: inti=42,*p=&i,&r=i; decltype(r+0)b;//注意这里,虽然r是一个引用类型(绑定了i),但是这里使用的是r绑定的对象,这里表达式的结果是int类型,所以返回的也是int类型,而不是引用类型 decltype(*p)c;//这里的错误的,注意*p不是一个变量,p才是变量,*p的计算结果是引用,引用必须初始化,解引用操作返回的结果就是引用   特别注意的一点是,引用类型只有在作为单

  • 《你的灯还亮着吗》阅读笔记三

    我们真的想解决问题吗? 有时候我们真的不是希望问题能被解决,大多数时候不知道自己的问题,不知道想要什么 所以在项目中我们真的遇到问题后,在想着严肃解决问题之前要问自己:“我们真的要解决问题吗?” 要不然在之后的过程中也是浪费时间,平添更多问题而已。 我们不要做最后看到水的鱼 我们努力将水变成沙

相关推荐

推荐阅读