1简介

这篇短文的目的是使用结构体实现一小组样本对象(即基于类的模板),可用于对多元数据集(如代谢组学或其他组学)进行探索性和统计分析。的更广泛和高级的使用结构体的模板中提供structToolbox软件包,其中包括质量过滤器,标准化,缩放,单变量和多变量统计和机器学习方法。

2开始

最新版本的结构体与您当前R版本兼容的可以使用BiocManager

#安装BiocManager如果不存在if (!requireNamespace("BiocManager", quiet = TRUE)) install.packages("BiocManager") # install structToolbox和依赖BiocManager::install("struct") # install ggplot if (!require('ggplot2')) {install.packages('ggplot2')}

ggplot2包也需要为这个小插图。

suppressPackageStartupMessages({#加载包库(struct) #加载ggplot库(ggplot2)})

3.结构体辅助函数

' struct '提供了许多帮助函数,可用于创建一个新的结构体对象从命令行或脚本中获取:

  • set_struct_obj ()
    • 用于创建一个新的结构对象
  • set_obj_method ()
    • 用于修改结构对象的方法
  • set_obj_show ()
    • 用于修改结构对象的显示输出

使用这些函数创建新结构体部分包含了基于提供的模板的对象5.1

3.1创建一个新的结构对象

要创建新的结构对象,请使用set_struct_obj ()函数。下面将介绍几种输入。

  • class_name
    • 新结构对象(字符)的名称。
  • struct_obj
    • 要创建的结构对象类型,例如模型、迭代器、度量等。
  • 参数个数
    • 输入槽的类型的命名向量。名称将成为槽位,类型将用于确定指定槽位允许的赋值类型(例如,整数、字符等)。
  • 输出
    • 作为参数个数,但输出槽。
  • 私人
    • 作为参数个数而且输出但是对于对象内部使用而不打算供用户使用的槽。这些插槽只能使用@访问。
  • 原型
    • 每个输入/输出/私有槽的默认值的命名列表。最好在这里为私有槽设置任何初始值。的值也是一个很好的实践预测槽,以设置对象的默认输出。
  • 在哪里
    • 指定在其中创建类定义的环境。默认是.GlobalEnv

中列出的槽请注意参数个数而且输出将可使用美元语法访问,并打算由用户获取/设置,而插槽命名在私人只对开发人员内部可用。

3.2更改默认方法

所有结构体对象有一些默认的方法,这些方法将被“重载”,即替换为提供特定于正在实现的新对象的功能。辅助函数set_obj_method ()通过以下输入提供此功能:

  • class_name
    • 更新方法的名称。
  • method_name
    • 要更新的方法的名称。必须是对象的现有方法。
  • 定义
    • 用来替换方法的函数。该函数将在对象上调用该方法时使用。
  • 签名
    • 输入参数所需的类。

3.3更改默认显示输出

所有结构体对象有一个默认值显示输出,输出的名字而且描述为一个对象。

如果希望在打印对象时提供附加信息,则可以重载显示方法使用set_obj_show ()函数,它有以下输入:

  • class_name
    • 要更新show方法的类的名称
  • extra_string
    • 的函数class_name对象作为字符串的输入和输出

的字符串输出extra_string函数将被附加到默认值显示输出。

4基于类的模板和结构体对象

结构体为许多不同类型的对象提供了S4类,可以将其视为可扩展的模板。这些对象是数据分析工作流的基本组成部分,包括:

  • DatasetExperiment对象
    • 一个扩展的SummarizedExperiment用于保存数据和元数据的对象
  • 模型对象
    • 用于过滤、规范化、转换、分类等。
  • model_seq对象
    • 模型对象的序列,用于将模型连接在一起。
  • 迭代器对象
    • 用于应用于模型和模型序列的重复方法,如交叉验证、重采样、排列等。
  • 度规对象
    • 用于定义分类器、回归模型等的性能指标。
  • 图表对象
    • 用于定义特定于模型/迭代器的ggplot对象
  • 实体对象
    • 用于定义输入和输出参数
  • 枚举对象
    • 类似于实体对象,但具有固定的允许值集

每个模板都具有类似的结构,并定义了许多特定于模板的方法。它们在设计时考虑到了数据分析工作流程的开发,可以很容易地将新方法合并到现有框架中。

所有结构体对象有许多在基类中定义的公共字段或“槽”struct_class对象:

  • 的名字
    • 对象的简短名称
  • 描述
    • 对对象功能的更长的描述
  • 类型
    • 对象的关键字列表,例如' classifier '
    • 使用该对象所需的R个包的列表
  • 引用
    • 中的对象的引用列表引用bibentry格式
  • 本体
    • 对象的本体术语标识符向量

所有结构体对象有一个显示方法定义,该方法总结对象。

S = struct_class(
# #“struct_class”对象  ## ----------------------- ## 名称:# #描述:

可以通过在创建对象时将槽包含为命名输入来设置它们。

struct_class(name = 'Example', description = 'Example struct object'
# #“struct_class”对象  ## ----------------------- ## 名称:# #例子描述:结构体对象的一个例子

还定义了方法,以便可以使用美元语法设置和检索槽的值。

#设置名称S$name = '基本示例
##[1]基本示例

除了这些公开可访问的插槽之外,还定义了两个额外的隐藏或内部插槽。这些槽不用于一般访问,因此不能使用美元语法访问。

  • .params
    • 类的输入参数使用的附加槽的列表模型迭代器图表
  • .outputs
    • 类的输出使用的附加槽的列表模型迭代器

这些槽的使用将在本节中讨论5因为它们只适用于扩展底座时struct_class模板。

4.1DatasetExperiment对象

DatasetExperimentObject是的引申SummarizedExperiment.它用于保存测量数据和相关的元数据,如组标签或特性/变量注释。所有结构体对象期望数据位于DatasetExperiment格式,示例在行中,变量/特征在列中。除了默认的插槽,DatasetExperiment对象还具有以下附加插槽:

  • 数据
    • 包含测量数据的数据帧。样本在行中,变量在列中。
  • sample_meta
    • 包含与样本相关的元数据(如组标签)的data.frame。行数必须等于样本数。
  • variable_meta
    • 包含与特性(如注释)相关的元数据的data.frame。行数必须等于特征的数量。

对于所有结构体对象可以在对象创建期间分配这些槽以及基类中的槽。

DE = DatasetExperiment(data =iris[, 1:4], sample_meta=iris[,5,drop=FALSE], variable_meta=data.frame('idx'=1:4,row.names=colnames(data)), name = "Fisher's iris dataset", description = 'The famous one'
##一个“DatasetExperiment”对象## ---------------------------- #名称:Fisher的虹膜数据集#描述:著名的#数据:150行x 4列# sample_meta: 150行x 1列# variable_meta: 4行x 1列

的虹膜数据集的正式版本包含在结构体包中。

DE = iris_DatasetExperiment() DE
这个著名的(Fisher’s或Anderson’s)虹膜数据集给出了3种虹膜中各50朵花的萼片长度和宽度以及花瓣长度和宽度的度量,单位分别为厘米。它们的种类是鸢尾,versicolor和virginica。## sample_meta: 150行x 1列## variable_meta: 4行x 1列

因为DatasetExperiment扩展SummarizedExperiment它继承了子设置、nrow、ncol等功能。

#列数(DE)
# # 4 [1]
# nrow(DE)
# # 150年[1]
#子集第2和第3列Ds = DE[,c(2,3)] d
这个著名的(Fisher’s或Anderson’s)虹膜数据集给出了3种虹膜中各50朵花的萼片长度和宽度以及花瓣长度和宽度的度量,单位分别为厘米。它们的种类是鸢尾,versicolor和virginica。## sample_meta: 150行x 1列## variable_meta: 2行x 1列

这些槽也可以使用美元语法访问。

获取数据帧头(DE$data)
# #萼片。花萼长度。宽度花瓣。花瓣长度。宽度## 1 5.1 3.5 1.4 0.2 ## 2 4.9 3.0 1.4 0.2 ## 3 4.7 3.2 1.3 0.2 ## 4 4.6 3.1 1.5 0.2 # 5 5.0 3.6 1.4 0.2 ## 6 5.4 3.9 1.7 0.4
# sample元头(DE$sample_meta)
##物种# 1 ## 2 ## 3 ## 4 ## 5 ## 6 #

注意,虽然技术上是可以设置的数据sample_meta而且variable_meta使用美元语法,通常最好是创建一个新的DatasetExperiment并在对象创建过程中分配它们,这是由于a的严格定义SummarizedExperiment

5模型对象

模型对象是最常用的模板,因为它们是数据分析工作流的主要构建块。它们可以用于实现数据处理方法,用于质量过滤、规范化和缩放,以及用于统计和机器学习的方法(如分类、回归和聚类)。

模型对象定义了三个惟一的槽,但它们都与模型序列相关,因此将在本节中详细讨论6

模型对象还有四种方法,用于实际执行预期的数据分析方法。

  • model_train
    • 一种用来训练模型的方法DatasetExperiment对象。
  • model_predict
    • 把一个训练好的模型应用到另一个模型上的一种方法DatasetExperiment对象,例如测试集。
  • model_apply
    • 当训练/测试不符合模型类型时使用,例如某些类型的规范化。默认情况下,此方法调用model_train而且model_predict按顺序在相同的输入数据上(有时称为自动预测)。
  • model_reverse
    • 一种通常只用于预处理方法的方法,在这种预处理方法中,能够逆向处理是有利的,例如在回归之后,以便预测在输入单位中。例如,model_apply可以减去均值,而model_reverse再把均值加回来。

为基础模型模板这些方法只起到占位符的作用;它们应该被定义为扩展模板的一部分,如下一节所述。

模型对象还使用.params而且.outputs基类的槽,以允许扩展模板时的灵活性,如下一节所示。

5.1使用模型模板

模型对象用作创建新对象的模板。在编程术语中,它的目的是由它派生的新对象继承。已经定义了方法,以便可以使用新功能重载它们。

structToolbox使用定义了许多模型对象setClass而且setMethod,这是在包中扩展模板的首选方法。

结构体也使得定义new成为可能模型物体,我们会在这里演示。我们将定义两个新对象,一个用于均值居中,另一个用于主成分分析。这些对象的更完整版本可以作为structToolbox包中。

方法定义新的模型对象是第一步set_struct_object ()函数(参见3.).

# mean centre对象mean_centre = set_struct_obj(class_name = 'mean_centre', struct_obj = 'model', params = character(mean = 'numeric'), outputs = c(class_name = 'PCA', struct_obj = 'model', params = c(number_components = 'numeric'), outputs = c(scores = 'DatasetExperiment', loading = 'data.frame'), private = character(0),prototype = list(number_components = 2, ontology = 'OBI:0200051', predicted = 'scores'))

我们创建的对象(mean_centre而且主成分分析)都延伸模型对象模板。mean_centre一个相当基本的模型只有一个输出槽吗集中而PCA对象有输入、输出并设置一些默认值。

新对象可以像其他对象一样初始化结构体,带有命名的输入参数值。

M = mean_centre(
# #“mean_centre”对象  ## ---------------------- ## 名称:# #描述:# #输出:集中,意味着# #预测:在# # seq_in:数据
P = PCA(number_components=4
一个“PCA”对象## -------------- ## name: ## description: ## input params: number_components ## outputs: scores, loading ## predictive: scores ## seq_in: data

新对象目前具有默认方法,需要使用either替换这些方法setMethod或者说辅助函数set_obj_method ()以提供所需的功能。

我们需要定义model_train而且model_predict对于两个新物体。我们将从mean_centre对象。

#意味着中心培训set_obj_method (class_name = mean_centre, method_name = model_train,定义= function (M, D){#计算所有训练数据列的意思是M = colMeans (D $ data) #分配输出槽M $意味着= M #总是返回修改后的模型对象返回(M)}) # mean_centre预测set_obj_method (class_name = mean_centre, method_name = model_predict,定义= function (M, D){#减去平均每一列的测试数据D $ data = D $ data -代表(M $的意思是,rep.int(nrow(D$data), ncol(D$data))) #分配给输出M$中心= D #总是返回修改后的模型对象返回(M)})

mean_centre对象现在可以与DatasetExperiment对象。

#创建对象实例M = mean_centre() #训练虹膜数据M = model_train(M,iris_DatasetExperiment()) #打印平均值显示函数M$平均值
# #萼片。花萼长度。宽度花瓣。花瓣长度。宽度## 5.843333 3.057333 3.758000 1.199333
# apply to iris_data M = model_predict(M,iris_DatasetExperiment()) #检索居中数据并显示列均值为零colMeans(M$ centric $data)
# #萼片。花萼长度。宽度花瓣。花瓣长度。宽度## -3.671137e-16 9.177844e-17 -3.256654e-17 -3.404684e-17

现在我们为PCA对象定义方法。

# PCA训练set_obj_method(class_name = 'PCA', method_name = 'model_train',定义= function (M, D){#得到的组件数量= M number_components #美元转换为矩阵X = as.matrix (D $ data) #计算模型=圣言(X, A, A) #载荷P = as.data.frame美元(模型v) # data.frame准备输出varnames =代表(' A ', 1)(我在1:A) {varnames[我]= paste0(“个人电脑”,i)} rownames (P) = colnames (X) colnames (P) = varnames output_value (M,“载荷”)= P #设置输出M $载荷= P #总是返回修改后的模型对象返回(M)}) # PCA预测set_obj_method (class_name =“主成分分析”,method_name = ' model_predict ',定义=函数(M, D){# #计算分数使用载荷#获得的组件数量= M number_components #美元转换为矩阵X = as.matrix (D $ data) #得到载荷P = M $载荷#计算分数= X % * % as.matrix (P) #将分数转换成DatasetExperiment = as.data.frame, rownames (,) = rownames (X) varnames =代表(' A ', 1)(我在1:A) {varnames[我]= paste0(“个人电脑”,i)} colnames (,) = varnames S = DatasetExperiment (data = sample_meta = D sample_meta美元,变量_meta=varnames) # set output M$scores=S #总是返回修改后的模型对象返回(M)})

就像mean_centre对象的主成分分析对象现在具有已定义的方法,可以与之一起使用DatasetExperiment对象。

# get average centric data DC = M$ centric # train PCA model P = model_apply(P,DC) # get scores P$scores
一个“DatasetExperiment”对象## ---------------------------- ## name: ## description: ## data: 150行x 4列## sample_meta: 150行x 1列## variable_meta: 4行x 1列

注意,因为我们定义了model_train而且model_predict主成分分析对象,我们不需要显式定义amodel_apply方法的默认应用model_train而且model_precict按顺序。对于一些定义a的方法model_apply定义更合适(例如t检验)和model_train而且model_predict未定义的。

6model_seq对象

类定义的一种特殊类型的列表结构体包中。它们可以通过象征性地将模型“添加”在一起来形成一个序列来创建。我们在这里用mean_centre ()而且主成分分析()我们创建的对象。

#创建模型序列MS = mean_centre() + PCA(number_components = 2) #打印摘要MS
一个model_seq对象,包含:## ##[1]##一个“mean_centre”对象## ---------------------- # name: # description: ## outputs:集中,平均## expected:集中## seq_in: data ## ##[2] ##一个“PCA”对象## -------------- # name: # description: # input params: number_components ## outputs: scores, loading ## expected: scores ## seq_in: data

model_train而且model_predict模型序列的方法将沿着模型列表自动传递数据。model_apply工作方式与模型相同,并将使用model_train而且model_predict顺序为模型序列。

除非指定,否则在对象的“预测”槽中命名的默认输出将被用作序列中下一个对象的数据输入。

对于PCA示例,数据被输入到mean_centre对象,应用均值居中,然后集中的输入主成分分析对象计算分数和加载。

#应用模型序列到iris_data MS = model_apply(MS,iris_DatasetExperiment())
一个“DatasetExperiment”对象## ---------------------------- ## name: ## description: ## data: 150行x 2列## sample_meta: 150行x 1列## variable_meta: 2行x 1列

为了改变通过模型序列的数据流,可以为每个模型设置三个槽:

  • 预测
    • 在模型序列中使用时要从模型输出的输出槽的名称。
  • seq_in
    • 输入参数槽的名称,该槽接收序列中前一个模型的输入,覆盖该槽的任何值集。默认值' data '假设连接对象是DatasetExperiment对象,并将其用作的输入model_train而且model_predict
  • seq_fcn
    • 有时默认输出的格式与输入不一致。例如,可能需要通过应用阈值将数值输出转换为逻辑输出。中的函数可以定义此操作seq_fcn槽。

有例子,这种先进的模型序列流控制在小插图structToolbox包中。

7迭代器对象

迭代器对象类似于模型对象模板,因为可以对它们进行扩展,使其具有指定的输入参数和输出。它们有一些独特的插槽:

  • 模型
    • 可以是一个模型model_seq(模型序列)对象。迭代器将调用model_train而且model_predict多次使用这个模型。
  • 结果
    • 运作方式与预测槽的模型对象,并指定对象的默认输出。这比预测这个时候迭代器不能组合成一个序列(但这可能在将来实现)。

迭代器对象用于重新采样方法,其中输入模型通过将数据划分到训练集和测试集而多次运行。交叉验证和排列测试只是可能使用迭代器对象的两个例子。

方法获取/设置迭代器要运行的模型模型方法。

#创建迭代器I = iterator() #添加PCA模型序列模型(I) = MS #检索模型序列模型(I)
一个model_seq对象,包含:## ##[1]##一个“mean_centre”对象## ---------------------- # name: # description: ## outputs:集中,平均## expected:集中## seq_in: data ## ##[2] ##一个“PCA”对象## -------------- # name: # description: # input params: number_components ## outputs: scores, loading ## expected: scores ## seq_in: data

模型也可以通过象征性地乘以a来“嵌套”在迭代器中模型model_seq.言下之意是迭代器将使用模型很多次了。这可以与模型的符号添加相结合,以创建序列。

I = iterator() * (mean_centre() + PCA())模型(I)
一个model_seq对象,包含:## ##[1]##一个“mean_centre”对象## ---------------------- # name: # description: ## outputs:集中,平均## expected:集中## seq_in: data ## ##[2] ##一个“PCA”对象## -------------- # name: # description: # input params: number_components ## outputs: scores, loading ## expected: scores ## seq_in: data

也可以在迭代器中嵌套迭代器,例如使用类似的方法创建一个' perented cross_validation '。

I = iterator() * iterator() * (mean_centre() + PCA())

一个运行方法,该方法可以以类似于method_train等来实现所需的功能。由开发人员来确保迭代器可以处理模型model_seq而且迭代器对象作为输入等迭代器运行方法可能相当复杂。为了简单起见,我们在这里不演示,但在structToolbox包装和相应的小插图。

8度规对象

度量对象通过将真实的已知值与模型(通常是分类器或回归模型)的预测输出进行比较来计算标量值。它们是运行迭代器的必需输入,根据迭代器.指标有一个惟一的槽。

  • 价值
    • 度量的计算值

计算方法提供的度规对象模板,可以使用与for相同的方法对其进行扩展model_train等。它需要三个输入:

    • 要计算的度量对象。
  • Y
    • 每个样本的真实值,例如组标签。
  • Yhat
    • 每个样本的预测值,例如来自分类模型。

计算方法可以手动调用,但通常由迭代器例如,在交叉验证过程中。

8.1图表对象

图表对象模板用于从输入生成ggplot对象DatasetExperiment模型迭代器.模板没有唯一的槽位,但包含一个chart_plot方法从输入对象生成ggplot对象。

作为一个简单的例子,我们创建了一个图表,用于从前面创建的PCA对象绘制分数。更全面的pca_scores_plot对象中包含的structToolbox还有其他一些用来绘制不同方法的输出。

我们使用助手函数set_struct_object ()来定义新的图表对象。

#新建图表对象set_struct_obj(class_name = 'pca_scores_plot', struct_obj = 'chart', params = c(factor_name = 'character'), prototype = list(name = 'PCA得分图',description = '前两个主成分散点图',libraries = 'ggplot2'))

chart_plot方法替换新对象的set_obj_method ()helper函数。

#新建chart_plot方法set_obj_method(class_name = 'pca_scores_plot', method_name = 'chart_plot', signature = c('pca_scores_plot','PCA'), definition = function(obj,dobj) {if (!is(dobj,'PCA')) {stop('此图表仅用于PCA对象')}#获取PCA分数数据S = dobj$scores$data #添加组标签S$factor_name = dobj$scores$sample_meta[[obj$factor_name]] # ggplot g = ggplot(data = S,aes_string(x='PC1',y='PC2', color ='factor_name')) + geom_point() + labs(color = obj$factor_name) #图表对象返回ggplot对象返回(g)})

注意,我们设置signature = c('pca_scores_plot', 'PCA')表示只有主成分分析应该接受对象作为此图表的第二个输入。

现在可以使用新的图表对象了主成分分析对象。

#创建图表对象C = pca_scores_plot(factor_name = 'Species') #使用经过训练的PCA对象从模型序列绘制图表chart_plot(C,MS[2]) + theme_bw() #添加主题

9实体而且枚举对象

这些结构体类用于使输入参数和输出信息更丰富和更灵活。不打算以相同的方式成为可扩展的模板模型对象。

通过将槽位的类型或类指定为实体枚举对象可以提供有关槽位的附加信息,例如更有信息的的名字和一个描述实体而且枚举槽位有一些独特的槽位:

  • 价值
    • 赋给输入参数/输出的值。
  • max_length
    • 输入值的最大长度。例如,设置为1可以确保该值不能设置为c(1,2)。默认是正无穷。
  • 允许
    • 枚举只有对象。输入参数/输出允许的值的列表。

两个对象都使用类型插槽,以确保为插槽分配的值只能是特定的类,例如设置Type = c('numeric', 'integer')不允许将参数值设置为字符。

的名字而且描述插槽可以很有用,例如在报告写作中提供参数的标准定义。

enitity而且枚举对象具有获取/设置所有槽的方法。它们被设计成与美元语法无缝地工作,就像您访问任何非实体槽的值一样。

作为一个例子number_components参数的主成分分析对象可以定义为实体对象。

# define entity npc = entity(name = '主组件数量',description = '要计算的主组件数量',type = c('numeric','integer'), value = 2, max_length = 1
##一个“实体”对象## ----------------- ##名称:主成分数量##描述:计算的主成分数量##值:2 #类型:数字,整数#最大长度:1

然后,它可以与set_struct_obj ()函数在创建PCA对象时使用“entity”作为的输入类型参数个数中包含实体对象原型的对象。它将完全像以前一样工作,但有额外的信息(的名字描述,等等)。

# PCA对象PCA = set_struct_obj(class_name = 'PCA', struct_obj = 'model', params = c(number_components = 'entity'), outputs = c(scores = 'DatasetExperiment', loading = 'data.frame'), private = character(0), prototype = list(number_components = npc, ontology = 'OBI:0200051', predicted = 'scores')
# # 3 [1]
#获取描述param_obj(P,'number_components'
##[1]“要计算的主成分数量”

9.1本体。

所有结构体对象有一个本体插槽,可以分配本体术语标识符。结构体利用的方式bioconductor包访问本体查找服务API,并根据提供的标识符获得名称和定义。

P = PCA() #返回PCA的本体列表,包括输入参数和输出本体(P)
## Slot“terms”:## [[1]]## term id: OBI:0200051 ## ontology: obi# label:主成分分析降维## description:主成分分析降维是通过应用主成分分析,保留低阶主成分,排除高阶主成分实现的降维##。# # iri: http://purl.obolibrary.org/obo/OBI_0200051
#返回仅用于PCA的本体(不是输入/输出)P$本体
# #[1]“OBI: 0200051”
#获取特定输入的本体IN = param_obj(P,'number_components'
# #字符(0)

注意:在v1.5.1之前的版本中国家档案馆类使用。现在这已被反对,赞成本体并将在未来的版本中删除。

10会话信息

sessionInfo ()
## R版本4.2.0 RC (22-04-19 r82224) ##平台:x86_64-pc-linux-gnu(64位)##运行在:Ubuntu 20.04.4 LTS ## ##矩阵产品:default ## BLAS: /home/biocbuild/bbs-3.15-bio /R/lib/libRblas. ##因此## LAPACK: /home/biocbuild/bbs-3.15-bio /R/lib/libRlapack。因此## ## locale: ## [1] LC_CTYPE=en_US。UTF-8 LC_NUMERIC= c# [3] LC_TIME=en_GB LC_COLLATE= c# [5] LC_MONETARY=en_US。utf - 8 LC_MESSAGES = en_US。UTF-8 ## [7] LC_PAPER=en_US。UTF-8 LC_NAME= c# [9] LC_ADDRESS=C LC_TELEPHONE= c# [11] LC_MEASUREMENT=en_US。UTF-8 LC_IDENTIFICATION=C ## ##附加的基本包:## [1]stats graphics grDevices utils datasets methods base ## ##其他附加的包:## [1]ggplot2_3.3.5 struct_1.8.0 biocstyle_id .24.0 ## ##通过命名空间加载(并没有附加):# [1] Rcpp_1.0.8.3 lattice_0.20-45 ## [3] prettyunits_1.1.1 assertthat_0.2.1 ## [5] digest_0.6.29 utf8_1.2.2 ## [5] R6_2.5.1 GenomeInfoDb_1.32.0 ## [9] stats4_4.2.0 evaluate_0.15 ## [11] httr_1.4.2 highr_0.9 ## [13] pillar_1.7.0 progresr_1.2.2 ## [15] zlibbioc_1.42.0 rlang_1.0.2 ## [15] zlibbioc_1.42.0 rlang_1.0.2 ## [17] curl_1 .3.2 jquerylib_0.1.4 ## [15] Matrix_1.4-1 rmarkdown_2.14 ## [23] labeling_0.4.2 stringgr_1 .4.0 ## [25] RCurl_1.98-1.6 munsell_0.5.0 ## [27] DelayedArray_0.22.0compiler_4.2.0 # # [29] xfun_0.30 pkgconfig_2.0.3 # # [31] BiocGenerics_0.42.0 htmltools_0.5.2 # # [33] tidyselect_1.1.2 SummarizedExperiment_1.26.0 # # [35] tibble_3.1.6 GenomeInfoDbData_1.2.8 # # [37] bookdown_0.26 IRanges_2.30.0 # # [39] matrixStats_0.62.0 fansi_1.0.3 # # [41] crayon_1.5.1 dplyr_1.0.8 # # [43] withr_2.5.0 bitops_1.0-7 # # [45] grid_4.2.0 ontologyIndex_2.7 # # [47] jsonlite_1.8.0 gtable_0.3.0 # # [49] lifecycle_1.0.1 DBI_1.1.2 # # [51] magrittr_2.0.3 scales_1.2.0 # # [53] cli_3.3.0stringi_1.7.6 ## [55] farver_2.1.0 xvector_1 .48.0 ## # [57] bslib_0.3.1 ellipsis_0.3.2 ## [61] rols_2.24.0 tools_4.2.0 ## [63] Biobase_2.56.0 glue_1.6.2 ## [65] purrr_0.3.4 hms_1.1.1 ## [67] MatrixGenerics_1.8.0 fastmap_1.1.0 ## [69] yaml_2.3.5 colorspace_2.0-3 ## [71] BiocManager_1.30.17基因组ranges_1 .48.0 ## [73] knitr_1.38 sass_0.4.1