数据库文件
R的数据库操作主要有以下几个包:RODBC, RMySQL, ROracle, RJDBC, RSQLite, DBI。这里只介绍DBI,因为通过使用不同的驱动,DBI就可以轻松地访问ODBC, JDBC, MySQL, Oracle and SQLite数据库。DBI被广泛地应用于Bioconductor的注释文件操作。使用DBI获取数据分为四步:建立联接,发送查寻语句,读取数据,关闭联接。数据库写入只是查寻语句不同,并且不需要再用fetch读取数据而已。
> library(DBI)
> library(RSQLite)
> dbPath <- system.file("extdata", "org.Hs.eg.sqlite", package = "org.Hs.eg.db")
> drv <- dbDriver("SQLite")
> db <- dbConnect(drv, dbPath)
> db
## <SQLiteConnection: DBI CON (79882, 0)>
> dbListTables(db) ## 等同于MySQL函数 show tables;
## [1] "accessions" "alias"
## [3] "chrlengths" "chromosome_locations"
## [5] "chromosomes" "cytogenetic_locations"
## [7] "ec" "ensembl"
## [9] "ensembl2ncbi" "ensembl_prot"
## [11] "ensembl_trans" "gene_info"
## [13] "genes" "go"
## [15] "go_all" "go_bp"
## [17] "go_bp_all" "go_cc"
## [19] "go_cc_all" "go_mf"
## [21] "go_mf_all" "kegg"
## [23] "map_counts" "map_metadata"
## [25] "metadata" "ncbi2ensembl"
## [27] "omim" "pfam"
## [29] "prosite" "pubmed"
## [31] "refseq" "sqlite_stat1"
## [33] "ucsc" "unigene"
## [35] "uniprot"
> dbListFields(db, "alias") ## 类似于MySQL函数 show columns from alias;
## [1] "_id" "alias_symbol"
> ## 从数据库读取数据
> sql <- "SELECT * FROM alias LIMIT 20"
> rs <- dbSendQuery(db, sql)
> rs
## <SQLiteResult: DBI RES (79882, 0, 3)>
> dbColumnInfo(rs)
## data frame with 0 columns and 0 rows
> dbGetStatement(rs)
## [1] "SELECT * FROM alias LIMIT 20"
> chunk <- fetch(rs, n = 10)
> chunk
## _id alias_symbol
## 1 1 A1B
## 2 1 ABG
## 3 1 GAB
## 4 1 HYST2477
## 5 2 A2MD
## 6 2 CPAMD5
## 7 2 FWP007
## 8 2 S863-7
## 9 3 A2MP
## 10 4 AAC1
> ## 把余下的数据全部读出
> fetch(rs, n = -1)
## _id alias_symbol
## 11 4 MNAT
## 12 4 NAT-1
## 13 4 NATI
## 14 5 AAC2
## 15 5 NAT-2
## 16 5 PNAT
## 17 6 AACP
## 18 6 NATP1
## 19 7 AACT
## 20 7 ACT
> ## 如果不再需要查询的结果了,需要清理掉它。
> dbClearResult(rs)
## [1] TRUE
> ## 断开数据库连接
> dbDisconnect(db)
## [1] TRUE
>
> ## 写入数据到数据库
> tfile <- tempfile()
> con <- dbConnect(drv, dbname = tfile)
> dbWriteTable(con, "test", chunk)
## [1] TRUE
>
> ## 测试一下写入的数据
> res <- dbSendQuery(con, statement = "SELECT * FROM test")
> ## 现在读取5行到一个data.frame
> data1 <- fetch(res, n = 5)
> dim(data1)
## [1] 5 3
> ## 把余下的数据全部读出
> data2 <- fetch(res, n = -1)
> data2
## row_names X_id alias_symbol
## 6 6 2 CPAMD5
## 7 7 2 FWP007
## 8 8 2 S863-7
## 9 9 3 A2MP
## 10 10 4 AAC1
> ## 如果不再需要查询的结果了,需要清理掉它。
> dbClearResult(res)
## [1] TRUE
> ## 断开数据库连接
> dbDisconnect(con)
## [1] TRUE
您好:我想请教您怎么能从零基础学好R并应用于生物信息学中?我自己看了很久收获特别少
无它,唯手熟尔。