kiw*_*iwi 1 sql database sqlite r dataset
我有一个包含许多表的大型 SQLite 数据库。我已使用 RSQLite 和 DBI 包在 RStudio 中建立了与此数据库的连接。(我已命名该数据库db)
library(RSQLite)
library(DBI)
Run Code Online (Sandbox Code Playgroud)
目前我必须读入所有表并手动为它们分配名称。例如:
country <- dbReadTable(db, "country")
date <- dbReadTable(db, "date")
#...and so on
Run Code Online (Sandbox Code Playgroud)
您会发现,如果您有很多表,这可能是一个非常耗时的过程。
所以我想知道是否可以创建一个新函数或使用现有函数(例如lapply()?)来更有效地完成此操作并从本质上加快此过程?
非常感谢任何建议:)
两种心态:
所有表/数据都放入一个命名列表中:
alldat <- lapply(setNames(nm = dbListTables(db)), dbReadTable, conn = db)
Run Code Online (Sandbox Code Playgroud)
这样做的好处是,如果表具有相似的含义,那么您可以对lapply每个表应用相同的函数。另一个好处是来自一个数据库的所有数据都存储在一起。
请参阅如何制作数据框列表?用于处理框架列表。
如果您希望它们作为全局(或封闭)环境中的实际变量,则采用前面的alldat, 和
ign <- list2env(alldat, envir = .GlobalEnv)
Run Code Online (Sandbox Code Playgroud)
返回值list2env是我们传递给的环境list2env,因此在这种情况下它并不是非常有用(尽管在其他时候它很有用)。我捕获它的唯一原因ign是为了减少控制台上的混乱......这是次要的。list2env主要是在副作用中起作用,因此这种情况下的返回值并不重要。