繁体   English   中英

读取/访问/将数据库文件导入到r

[英]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.nameProjectManager软件包中的一个函数,用于清理指定数据库中表的文件名。 例如,它将名为data_table的数据库表data_tabledata.table

.TargetEnvProjectManager包中的一个变量,它指向.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM