最近编辑:2019年10月7日
SQL数据库是非常常用的存储非常大的基因组数据资源。许多有用的工具,例如DBI,dbplyr为R用户查询和操作数据提供了方便的界面。这些工具以整齐的格式表示SQL表,并支持惰性和快速聚合操作(例如,* _join
,联盟
,等等)用于相同资源的表。如果选择了跨数据库聚合(使用复制= TRUE
),但是由于整个表的内部复制过程而变得非常昂贵。高级函数的使用往往涉及到专门的SQL知识,这给普通的SQL函数带来了挑战R用户。现有生物信息学工具的互操作性是次优的,例如SummarizedExperiment表示许多现代生物信息学管道所基于的测序或基因分型实验的容器。
SQLDataFrame包是使用熟悉的类似dataframe的范例开发的,它惰性地表示来自不同SQL数据库(如SQLite和MySQL)的非常大的数据集。类似dataframe的接口提供了熟悉的共性R用户在简单的数据操作,如方括号子集,rbinding等。对现代R用户,它也识别整洁
数据分析dplyr语法支持% > %
,选择
,过滤器
,变异
等。更重要的是,在SQLDataFrame中实现了特定于数据库类型的策略,以有效地处理跨数据库操作,而不会引起任何内部开销高昂的进程(特别是对于具有写权限的数据库)。一些以前比较困难的数据操作也变得简单快捷R,如跨数据库ID匹配与转换、变体注释提取等。SQLDataFrame的可伸缩性和互操作性有望极大地促进超大基因组数据资源的处理,并促进整体生物信息学分析。
SQLDataFrame目前支持最常用的基于sql的数据库SQLite、MySQL和谷歌BigQuery的DBI后端。在将来或根据特性要求,我们将实现这个包,以便用户可以选择使用不同的数据库后端SQLDataFrame
表示。
下面是一个常用后端列表(粗体已经被支持了!):
如果(!requireNamespace("BiocManager", quiet = TRUE)) install.packages("BiocManager")::install("SQLDataFrame")
开发版也可以从Github下载。
BiocManager:安装(“Liubuntu / SQLDataFrame”)
库(SQLDataFrame)库(DBI)
SQLDataFrame
类SQLDataFrame
构造函数有两种构造a的方法SQLDataFrame
对象:
提供一个参数康涅狄格州
,数据表
而且是从
.康涅狄格州
是有效的DBIConnection从SQLite或MySQL;数据表
指定将表示为的数据库表名SQLDataFrame
对象。如果指定的数据库名中只有一个表可用,则此参数可以留空。的是从
参数用于指定表中的列名,该列名可以唯一地标识所有数据观察值(行)。
提供数据表
,是从
以及用于构建有效DBIConnections的凭据。对于SQLite,凭据参数包括dbname
.对于MySQL,凭据参数是宿主
,用户
,密码
.除了凭证之外,用户还必须提供类型
参数指定SQL数据库类型。支持的类型有SQLite和MySQL。如果未指定,默认使用“SQLite”。受支持的数据库表可以在磁盘上,也可以远程在web或云上。
dbfile <- system.file("extdata/test.db", package = "SQLDataFrame") conn <- DBI::dbConnect(DBI::dbDriver("SQLite"), dbname = dbfile) obj <- SQLDataFrame(conn = conn, dbtable = "state", dbkey = "state")
从数据库凭据构造:
obj1 <- SQLDataFrame(dbname = dbfile, type = "SQLite", dbtable = "state", dbkey = "state")所有。equals (obj, obj1) #> [1] TRUE
注意读入数据库表后SQLDataFrame
,键列将保持为固定列显示在左手边,与|
将关键列与其他列分开。的ncol
,colnames
,相应的列子集只应用于非键列。
obj #> SQLDataFrame with 50行和4列# |州|分区区域人口规模#> <字符> | <字符> <字符> <数字> <字符> #>阿拉巴马州|东南中部南部3615中#>阿拉斯加|太平洋西部365小#>亚利桑那州|西部山区2280中#>阿肯色州|西部南部中部南部2110中# b>加州|太平洋西部21198大#> ... . ... ... ... ...# |弗吉尼亚州|南大西洋南部4981中#华盛顿|太平洋西部3559中#西弗吉尼亚州|南大西洋南部1799中#>威斯康星州|中#>怀俄明州|山西部376小暗(obj) #> [1] 50 4 colnames(obj) #>[1]“分区”“地区”“人口”“规模”
为了使SQLDataFrame
对象越轻越紧凑,对象中只包含5个槽:tblData
,是从
,dbnrows
,dbconcatKey
,索引
.元数据信息可以使用插槽访问器或其他实用函数通过这5个插槽返回。
slotNames(obj) #> [1] "dbkey" "dbnrows" "tblData" "indexes" #> b[5] "dbconcatKey" "elementType" "elementMetadata" "metadata" dbtable(obj) #> [1] "state" dbkey(obj) #> [1] "state" connSQLDataFrame(obj) #> #>路径:/tmp/RtmpRM3VSz/Rinst26bffd2872677e/SQLDataFrame/extdata/test.db #>扩展名:TRUE
此外,还定义了许多有用的常用方法SQLDataFrame
对象,使其成为更像dataframe的数据结构。例如,我们可以用dimnames ()
返回数据的行名/冒号。它返回一个未命名的列表,其中第一个元素总是行名零
,第二个元素是colnames(也可以使用colnames ()
方法)。昏暗的()
方法定义为返回数据库表的维度,从而启用nrow () / ncol ()
以提取特定的维度。长度()
方法也定义了,其工作原理与ncol ()
.
注意rownames (SQLDataFrame)
永远都是零
中不支持行名SQLDataFrame
.然而,ROWNAMES (obj)
是为了[
用字符进行子集。
50 4个dimnames(obj) #>[[1]] #> #>[[2]] #>[1]“分区”“地区”“亚利桑那州”“阿肯色州”#>[1]“阿拉巴马”“阿拉斯加”“亚利桑那州”“阿肯色州”#>[5]“加利福尼亚州”“科罗拉多州”“康涅狄格州”“特拉华州”#>[9]“佛罗里达州”“佐治亚州”“夏威夷州”“爱达荷州”#> b[13]“伊利诺伊州”“印第安纳州”“爱荷华州”“堪萨斯州”#> b[17]“肯塔基州”“路易斯安那州”“缅因州”“马里兰州”#> b[21]“马萨诸塞州”“密歇根州”“明尼苏达州”“密西西比州”#>[25]“密苏里州”“蒙大拿州”“内布拉斯加州”“内华达”#>[29] "New Hampshire" "New Jersey" "New Mexico" "New York" #> [33] "North Carolina" "North Dakota" "Ohio" "Oklahoma" #> [37] "Oregon" "Pennsylvania" "Rhode Island" "South Carolina" #> [41] "South Dakota" "Tennessee" "Texas" "Utah" #> [45] "Vermont" "Virginia" "Washington" "West Virginia" #> [49] "Wisconsin" "Wyoming"
请注意这一数据表()
访问器仅适用于SQLDataFrame
惰性TBL携带的对象tblData
Slot对应一个数据库。如果SQLDataFrame
生成于rbind
,联盟
或* _join
,叫saveSQLDataFrame ()
将惰性TBL保存到磁盘,以便数据表()
将被激活。
数据表(obj) # >[1]“状态”aa < - rbind (obj [1:5,], obj [6:10,]) aa # > SQLDataFrame 10行4列# >状态|分割区域人口规模# > <人物> | <人物> <人物> <数字> <人物> # >阿拉巴马州|东南亚中心3615中等# >阿拉斯加太平洋西部亚利桑那州365小# > | |西部山区2280中等# >阿肯色州|西部南部中部南部加州2110中等# > |太平洋西部科罗拉多州21198大# > |西部山区2541中等# >康涅狄格州|新英格兰东北部3100中等# >特拉华州|南大西洋南部579人small #> Florida | South Atlantic South 8277 large #> Georgia | South Atlantic South 4931 medium dbtable(aa) ## message #> Warning in dbtable(aa): ## not available for SQLDataFrame with lazy queries of 'union', 'join', or 'rbind'. #> ## call 'saveSQLDataFrame()' to save the data as database table and call 'dbtable()' again! bb <- saveSQLDataFrame(aa, dbname = tempfile(fileext=".db"), dbtable = "aa") #> ## A new database table is saved! #> ## Source: table [10 X 4] #> ## Database: sqlite 3.39.4 [/tmp/RtmpiaiuTE/file26c3f93d6dbafe.db] #> ## Use the following command to reload into R: #> ## sdf <- SQLDataFrame( #> ## dbname = '/tmp/RtmpiaiuTE/file26c3f93d6dbafe.db', #> ## type = 'SQLite', #> ## dbtable = 'aa', #> ## dbkey = 'state') connSQLDataFrame(bb) #> #> Path: /tmp/RtmpiaiuTE/file26c3f93d6dbafe.db #> Extensions: TRUE dbtable(bb) #> [1] "aa"
我们也可以构造aSQLDataFrame
对象直接从文件名获取。的makeSQLDataFrame
函数接受常见文本文件(.csv, .txt等)文件名字符值的输入,写入数据库表,并作为SQLDataFrame
对象。的值dbname
而且数据表
论点。如果为NULL,则为的默认值dbname
将是一个临时数据库文件,以及数据表
会是basename(文件名)
没有扩展。
请注意输入文件必须有一个或多个列,这些列可以唯一地标识要使用的每个观察(行)是从()
为SQLDataFrame
.此外,文件必须是矩形的,也就是说,行名是不接受的。但是用户可以将行名保存为单独的列。
mtc <- tibble::rownames_to_column(mtcars)[,1:6] filename <- file.path(tempdir(), "mtc.csv") write.csv(mtc, file= filename, row.names = FALSE) aa <- makeSQLDataFrame(filename, dbkey = "rowname", sep = ",", override = TRUE) #> ##一个新的数据库表被保存!#> ##来源:table [32 X 5] #> ##数据库:sqlite 3.39.4 [/tmp/RtmpiaiuTE/file26c3f91009ab7b.db] #> ##使用以下命令重新加载到R中:#> ## sdf <- SQLDataFrame(#> ## dbname = '/tmp/RtmpiaiuTE/file26c3f91009ab7b.db', #> ## type = 'SQLite', #> ## dbtable = 'mtc',# > # #是从= rowname) # # > > aa SQLDataFrame 32行5列# > rowname | mpg共青团disp惠普见鬼# > <人物> | <数字> <整数> <数字> <整数> <数字> # >“马自达RX4”| 21.0 6 160 110 3.90 # >“马自达RX4摇”| 21.0 6 160 110 3.90 # >“日产710”| 22.8 - 4 108 93 3.85 # >“大黄蜂4驱动”| 21.4 6 258 110 3.08 # >“大黄蜂Sportabout”| 18.7 8 360 175 3.15 #> ... . ... ... ... ... ...#>“Lotus Europa”| 30.4 4 95.1 113 3.77 #>“福特Pantera L”| 15.8 8 351.0 264 4.22 #>“法拉利Dino”| 19.7 6 145.0 175 3.62 #>“玛莎拉蒂宝来”| 15.0 8 301.0 335 3.54 #>“沃尔沃142E”| 21.4 4 121.0 109 4.11 connSQLDataFrame(aa) #> #>路径:/tmp/RtmpiaiuTE/file26c3f91009ab7b. >扩展:TRUE dbtable(aa) #> [1] "mtc"
使用所有的方法([
构造子集,rbind
,* _join
,等等,)将在下一节中提供SQLDataFrame
方法,直到用户显式调用saveSQLDataFrame
实现函数。saveSQLDataFrame
编写携带进来的惰性TBLtblData
插入磁盘上的数据库表,并重新打开SQLDataFrame
对象从新路径中获取。
还建议用户拨打电话saveSQLDataFrame
经常避免过多的惰性层,从而降低数据处理的速度。
connSQLDataFrame(obj) #> #>路径:/tmp/RtmpRM3VSz/Rinst26bffd2872677e/SQLDataFrame/extdata/test.db #>扩展名:TRUE dbtable(obj) #> [1] "state" obj1 <- saveSQLDataFrame(obj, dbname = tempfile(fileext = ".db"), dbtable = "obj_copy") #> ## #保存新的数据库表!# > # #来源:表< obj_copy > 50 X[4] # > # #数据库:sqlite 3.39.4 [/ tmp / RtmpiaiuTE / file26c3f9369ab83.db] # > # #使用以下命令重新加载到R: # > # #自卫队< - SQLDataFrame (# > # # dbname =“/ tmp / RtmpiaiuTE / file26c3f9369ab83.db”,# > # #类型=“sqlite”,# > # #数据表=“obj_copy”,# > # #是从=“状态”)connSQLDataFrame(其中obj1) # > < SQLiteConnection > # >路径:/ tmp / RtmpiaiuTE file26c3f9369ab83.db # >扩展:真实数据表(其中obj1) # >[1]“obj_copy”
[[
构造子集[[, SQLDataFrame
行为类似于[[, DataFrame
并从单个列中返回已实现的值向量。美元,SQLDataFrame
还定义为方便地提取列值。
头部(obj[[1]]) #>[1]“中东部”“太平洋”“山脉”#>[4]“中西部”“太平洋”“山脉”头部(obj[["region"]]]) #>[1]“南”“西”“西”“南”“西”“西”头部(obj$size) #>[1]“中”“小”“中”“中”“大”“中”
我们还可以使用字符提取来获取键列值。
head(obj[["state"]]) #>[1] "阿拉巴马" "阿拉斯加" "亚利桑那州" "阿肯色州" "加州" #>[6]"科罗拉多"
[
构造子集SQLDataFrame
实例可以用类似的方式进行子集DataFrame
遵循常规R数字、字符或逻辑向量的约定;逻辑向量被循环到适当的长度。
请注意,使用= FALSE下降
如果您想返回SQLDataFrame
对象,否则为默认值= TRUE下降
总是返回该列的已实现值。
obj[1:3, 1:2] #> SQLDataFrame with 3行2列#> state | division region #> | #> Alabama | East South Central South #> Alaska | Pacific West #> Arizona | Mountain West obj[c(TRUE, FALSE), c(TRUE, FALSE),drop=FALSE] #> SQLDataFrame with 25 row and 2 columns #> state | division population #> | #> Alabama | East South Central 3615 #> Arizona | Mountain 2280 #> California | Pacific 21198 #> Connecticut | New England 3100 #> Florida | South Atlantic 8277 #> ... . ... ...#> SQLDataFrame with 3行1列#> state | population #> <字符> | <数字> #> Alabama | 3615 #> Alaska | 365 # | 2280 obj[,]"population"] ##实现列值#> [1]3615 365 2280 2110 21198 2541 3100 579 8277 4931 868 813 #> [13]11197 5313 2861 2280 9111 3806 1058 4122 5814 9111 3921 2341 #> [25]4767 746 1544 590 812 7333 1799 18076 5441 637 10735 2715 #> [37]2284 11860 931 2816 746 4173 12237 1203 472 4981 3559 1799 #> [49]4589 376
用字符向量进行子集设置适用于SQLDataFrame
对象。对于组合键,用户需要通过连接键值:
用于行子集设置(更多细节请参阅内部实现的小插图)。
rnms <- ROWNAMES(obj) obj[c("Alabama", "Colorado"),] #> SQLDataFrame with 2 row and 4 columns #> state | division region population size #> | #> Alabama | East South Central South 3615 medium #> Colorado | Mountain West 2541 medium
obj1 <- SQLDataFrame(conn = conn, dbtable = "state", dbkey = c("region", "population")) rnms <- ROWNAMES(obj1) obj1[c("South:3615.0", "West:365.0"),] #> SQLDataFrame with 2 row and 3 column #> region population | division state size #> | #> South 3615 | East South Central Alabama medium #> West 365 | Pacific Alaska small
列表样式子集还允许从SQLDataFrame
对象,返回SQLDataFrame
默认情况下。
obj[1] # b> SQLDataFrame with 50 row and 1 column #> state | division #> | #> Alabama | East South Central #> Alaska | Pacific #> Arizona | Mountain #> Arkansas | West South Central #> California | Pacific #> ... . ...#>弗吉尼亚州|南大西洋#>华盛顿|太平洋#>西弗吉尼亚州|南大西洋#>威斯康星州|东北中部#>怀俄明州|山obj[“区域”]#> SQLDataFrame 50行1列#>州|地区#> <字符> | <字符> #>阿拉巴马|南#>阿拉斯加|西# b>亚利桑那州|西#>阿肯色州|南#>加州|西#> ... . ...#>弗吉尼亚州南部|华盛顿西部|西弗吉尼亚州南部|威斯康星州北部|怀俄明州西部|
我们还启用了S3方法过滤器
而且变异
从dplyr
包,以便用户可以方便地过滤数据观察和添加新列。
obj1 %>% filter(division == "South Atlantic" & size == "medium") #> SQLDataFrame with 5 row and 3 column #> region population | division state size #> | #>南4931 |南Atlantic Georgia medium #>南4122 |南Atlantic Maryland medium #>南2816 |南Atlantic South Virginia medium #>南4981 |南Atlantic Virginia medium #>南1799 |南Atlantic West Virginia medium
obj1 %>% mutate(p1 = population/10, s1 = size) #> SQLDataFrame with 50行5列#>区域人口|分区州大小#> <字符> <数字> | <字符> <字符> <字符> #>南3615 |阿拉巴马州东南部中部中型#>西365 |阿拉斯加太平洋小型#>西2280 |亚利桑那州山区中型# b>南2110 |阿肯色州中南部西部中型#>西21198 |加利福尼亚太平洋大型#> ... ... . ... ... ...#>南4981 |南大西洋弗吉尼亚中号#>西3559 |太平洋华盛顿中号#>南1799 |南大西洋西弗吉尼亚中号#>北中部4589 |威斯康辛中东部中号#>西376 |怀俄明州山区小#> p1 s1 #> <数字> <字符> #> 361.5中号#> 36.5小#> 228.0中号# b> 211.0中号#> 2119.8大#> ... ...#> 498.1中号#> 355.9中号#> 179.9中号#> 458.9中号#> 37.6小号
与…保持一致DataFrame
,联盟
而且rbind
方法实现为SQLDataFrame
,在那里联盟
返回SQLDataFrame
按是从(obj)
,rbind
保持输入对象的原始顺序。
dbfile1 < -执行(“extdata / test.db”、包=“SQLDataFrame”)con1 < - DBI:: dbConnect (dbDriver(“SQLite”),dbname = dbfile1) dbfile2 < -执行(“extdata / test1.db”、包=“SQLDataFrame”)con2 < - DBI:: dbConnect (dbDriver(“SQLite”),dbname = dbfile2)小说< - SQLDataFrame(康涅狄格州= con1数据表=“状态”,是从= c(“状态”))ss2 < - SQLDataFrame(康涅狄格州= con2数据表=“state1”,是从= c(“状态”))ss11 <(魔法石,第1章(样本(5))ss21 ss2 < -(样本(10、5),)
Obj1 <- union(ss11, ss21) Obj1 ##被“dbkey()”重新排序
Obj2 <- rbind(ss11,ss21) methoda # #保持原来的订单通过更新行索引# > SQLDataFrame 10行4列# >状态|分割区域人口规模# > <人物> | <人物> <人物> <数字> <人物> # >亚利桑那州|西部山区2280中等# >阿拉斯加太平洋西部加州365小# > | |太平洋西阿拉巴马州21198大# > |东南亚中央阿肯色州3615中等# > |西中南部南康涅狄格州2110中# > |新英格兰东北部3100中等# >亚利桑那州|西山2280中#>乔治亚州|南大西洋南部4931中#>科罗拉多州|西山2541中#>佛罗里达州|南大西洋南部8277大号
的* _join
实施家庭方法SQLDataFrame
对象,包括left_join
,inner_join
,semi_join
而且anti_join
,它提供了合并来自不同来源的数据库文件的功能。
ss12 <- ss1[1:10, 1:2] ss22 <- ss2[6:15, 3:4] left_join(ss12, ss22) #>由= "状态" # > SQLDataFrame 10行4列# >状态|分割区域人口规模# > <人物> | <人物> <人物> <数字> <人物> # >阿拉巴马州|东南亚中央< NA > < NA > # | >阿拉斯加太平洋西部< NA > < NA > # >亚利桑那州|西部山区< NA > < NA > # >南部阿肯色州|西中南< NA > < NA > # >加州|太平洋西部< NA > < NA > # > |科罗拉多西部山区2541中等# >康涅狄格州|新英格兰东北部3100中等# >特拉华州|南大西洋的南579小#>佛罗里达|南大西洋| 8277大#>格鲁吉亚|南大西洋| 4931中内联(ss12, ss22) #>加入,by = "state" #> SQLDataFrame with 5行4列#> state |分区区域人口规模#> <字符> | <字符> <字符> <数字> <字符> #>科罗拉多州|西部山2541中#>康涅狄格州|新英格兰东北部3100中#>特拉华州|南大西洋南579小#>佛罗里达州|南大西洋南8277大# b>佐治亚州|南大西洋南4931中半加入(ss12, ss22) #>加入,by = "state" #> SQLDataFrame with 5行2列#> state |分区区域#> <字符> | <字符> <字符> #>科罗拉多州|西部山#>康涅狄格州|新英格兰东北部#>特拉华州|南大西洋南#>佛罗里达州|南大西洋南#>佐治亚州|南大西洋南anti_join(ss12, ss22) #>加入,by = "state" #> SQLDataFrame with 5行2列# b> state |分区区域#> <字符> | <字符> <字符> #>阿拉巴马州|东部南部中部南部#>阿拉斯加|太平洋西部#>亚利桑那州|西部山区#>阿肯色州|西部南部中部南部#>加州|太平洋西部
SQLDataFrame现在支持MySQL数据库表通过RMySQL,用于本地MySQL服务器,或web或云上的远程MySQL服务器。SQLDataFrame结构,* _join
功能,联盟
,rbind
、保存均支持。支持对相同或跨MySQL数据库进行聚合操作。具体请参见功能文档。
这里我将展示来自ensembl的MySQL表的一个简单用例。
library(RMySQL) ensbConn <- dbConnect(dbDriver(“MySQL”),host="genome- MySQL .soe.ucsc.edu", user ="genome ", dbname =" xenTro9") enssdf <- SQLDataFrame(conn = ensbConn, dbtable =" xenoRefGene", dbkey = c("name", "txStart")) #> .local(conn, statement,…):Unsigned INTEGER in col 0 imported as #> numeric #> Warning in .local(conn, statement,…):Unsigned INTEGER in col 4 imported as #> numeric #> Warning in .local(conn, statement,…):.local(conn, statement,…)中的无符号整数:col 6中的无符号整数导入为#> numeric #> .local(conn, statement,…)中的无符号整数导入为#> numeric #> .local(conn, statement,…)中的无符号整数导入为#> numeric #> .local(conn, statement,…)中的无符号整数导入为#> numeric #> .local(conn, statement,…)中的无符号整数导入为#> numeric #> .local(conn, statement,…)中的警告:.local(conn, statement,…)中的无符号整数:col 6中的无符号整数导入为#> numeric #> .local(conn, statement,…)中的无符号整数导入为#> numeric #> .local(conn, statement,…)中的警告:col 7中的无符号整数导入为#> numeric #> .local(conn, statement,…)中的警告:Unsigned INTEGER in col 8 imported as #> numeric enssdf1 <- enssdf[1:20, 1:2] enssdf2 <- enssdf[11:30,3:4] res <- left_join(enssdf1, enssdf2) #> Joining, by = c("name", "txStart") #> .local(conn, statement,…)中的Unsigned INTEGER import as #> numeric #> .local(conn, statement,…)中的Unsigned INTEGER import as #> numeric #> .local(conn, statement,…)中的警告:.local(conn, statement,…)中的警告:将col 1中的无符号整数导入为#> numeric #> .local(conn, statement,…)中的警告:将col 2中的无符号整数导入为#> numeric #> .local(conn, statement,…)中的警告:将col 5中的无符号整数导入为#> numeric
SQLDataFrame刚刚添加了对谷歌BigQuery表的支持。使用构造和查询[
而且过滤器
支持!
使用时需要“身份验证和授权”bigrquery.检查在这里欲知详情。
还要注意,BigQuery表的支持为高效的数据表示实现了专门的策略。的是从()
默认为SurrogateKey
,是从
参数将在构造过程中被忽略。
Library (bigrquery) bigrquery::bq_auth() ##使用此命令在##浏览器中授权bigrquery。bqConn <- DBI::dbConnect(dbDriver("bigquery"), project = "bigquery-public-data", dataset = "human_variant_annotation", billing = "") ##如果之前没有提供##授权,必须指定一个已经与谷歌Cloud有##链接的##项目名。sdf <- SQLDataFrame(conn = bqConn, dbtable = "ncbi_clinvar_hg38_20180701") sdf[1:5, 1:5] sdf %>% select(GENEINFO) sdf %>% filter(GENEINFO == "PYGL:5836") sdf %>% filter(reference_name == "21")
sessionInfo() #> R version 4.2.1(2022-06-23) #>平台:x86_64-pc-linux-gnu (64-bit) #>运行在:Ubuntu 20.04.5 LTS #> #>矩阵产品:默认#> BLAS: /home/biocbuild/bbs-3.16-bioc/R/lib/libRblas。所以#> LAPACK: /home/biocbuild/bbs-3.16-bio /R/lib/libRlapack。so #> #> 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]stats4 stats graphics grDevices utils datasets methods #>[8]基础#> #>其他附加包:#> [1]RMySQL_0.10.24 DBI_1.1.3 SQLDataFrame_1.12.0 #> [4] S4Vectors_0.36.0 BiocGenerics_0.44.0 dbplyr_2.2.1 #> [7] dplyr_1.0.10 #> #>通过命名空间加载(且未附加):#> [9] memoise_2.0.1 jsonlite_1.8.3 evaluate_0.17 RSQLite_2.2.18 #> [17] lifecycle_1.0.3 tibble_3.1.8 pkgconfig_2.0.3 rlang_1.0.6 #> [17] cli_3.4.1 yaml_2.3.6 xfun_0.34 fastmap_1.1.0 #> [21] withr_2.5.0 string_1 .4.1 knitr_1.40 generics_0.1.3 #> [25] vctrs_0.5.0 sass_0.4.2 bit64_4.0.5 tidyselect_1.2.0 #> [29] glue_1.6.2 R6_2.5.1 fansi_1.0.3 rmarkdown_2.17 #> [33] purrr_0.3.5Blob_1.2.3 magrittr_2.0.3 htmltools_0.5.3 #> [37] assertthat_0.2.1 utf8_1.2.2 stringi_1.7.8 lazyeval_0.2.2 #> [41] cachem_1.0.6