[英]reading/ accessing/importing a database file into r
我希望每个人都过得不错,我正在尝试将数据库文件读/导入到扩展名为.db的R中,但我无法这样做。 我搜索了相关材料,但找不到答案。 数据文件是关于Wikipedia文章的内容,并且是一个很大的文件。 所以任何帮助都会非常有帮助。 我也尝试了此方法以及将.db文件导入R,但是遇到了相同的错误,由于我是R的新手,因此我很难理解所提出的答案。
library(project template)
x<-db.reader("wiki.db,"H:\\wiki.db","wiki.db")
Error: could not find function "db.reader"
因此,如以上博文所述,我应用了答案以如下方式运行该函数
db.reader <- function(data.file, filename, variable.name)
{
require.package('RSQLite')
sqlite.driver <- dbDriver("SQLite")
connection <- dbConnect(sqlite.driver,
dbname = filename)
tables <- dbListTables(connection)
for (table in tables)
{
message(paste(' Loading table:', table))
data.parcel <- dbReadTable(connection,
table,
row.names = NULL)
assign(clean.variable.name(table),data.parcel,envir = .TargetEnv)
}
disconnect.success <- dbDisconnect(connection)
if (! disconnect.success)
{
warning(paste('Unable to disconnect from database:', filename))
}
}
但是现在我得到了错误
Loading table: FArevisionContentPlain
Error in assign(clean.variable.name(table), data.parcel, envir = .TargetEnv)
could not find function "clean.variable.name"
任何帮助将不胜感激,将对我非常有帮助。
我没有要测试的db文件,但是如果您对库有疑问,可以在此处找到源代码。 同样,我无法对此进行测试,但是根据您上面的评论,您可以执行以下操作:
my.db.reader <- function(data.file, filename, variable.name)
{
require.package('RSQLite')
sqlite.driver <- dbDriver("SQLite")
connection <- dbConnect(sqlite.driver,
dbname = filename)
tables <- dbListTables(connection)
for (table in tables)
{
message(paste(' Loading table:', table))
data.parcel <- dbReadTable(connection,
table,
row.names = NULL)
assign(clean.variable.name(table),
data.parcel,
envir = .TargetEnv)
}
disconnect.success <- dbDisconnect(connection)
if (! disconnect.success)
{
warning(paste('Unable to disconnect from database:', filename))
}
}
clean.variable.name <- function(variable.name)
{
variable.name <- gsub('^[^a-zA-Z0-9]+', '', variable.name, perl = TRUE)
variable.name <- gsub('[^a-zA-Z0-9]+$', '', variable.name, perl = TRUE)
variable.name <- gsub('_+', '.', variable.name, perl = TRUE)
variable.name <- gsub('-+', '.', variable.name, perl = TRUE)
variable.name <- gsub('\\s+', '.', variable.name, perl = TRUE)
variable.name <- gsub('\\.+', '.', variable.name, perl = TRUE)
variable.name <- gsub('[\\\\/]+', '.', variable.name, perl = TRUE)
variable.name <- make.names(variable.name)
return(variable.name)
}
x<-my.db.reader("wiki.db,"H:\\wiki.db","wiki.db")
这只是用于定义两个功能的源代码。 最后一行是如何使用原始问题中指定的参数调用刚刚创建的函数。
clean.variable.name
是ProjectManager
软件包中的一个函数,用于清理指定数据库中表的文件名。 例如,它将名为data_table
的数据库表data_table
为data.table
。
.TargetEnv
是ProjectManager
包中的一个变量,它指向.GlobalVariable
(请参阅此处 )。 因此,如果将db.reader
手动放入代码中,则不会找到此变量。
为避免这些错误,您可以忽略使用clean.variable.name
,还可以指定自己的环境变量:
e <- new.env()
custom.db.reader <- function(data.file, filename, variable.name) {
require.package('RSQLite')
sqlite.driver <- dbDriver("SQLite")
connection <- dbConnect(sqlite.driver, dbname = filename)
tables <- dbListTables(connection)
for (table in tables) {
message(paste(' Loading table:', table))
data.parcel <- dbReadTable(connection, table, row.names = NULL)
assign(table, data.parcel, envir = e)
}
disconnect.success <- dbDisconnect(connection)
if (! disconnect.success) {
warning(paste('Unable to disconnect from database:', filename))
}
}
如果数据库表名为data_table
,则可以在e$data_table
处访问导入的数据库表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.