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

时间:2015-12-16 15:02:51

标签: r

我希望每个人都做得很好我正在尝试将数据库文件读取/导入到扩展名为.db的R,但我无法这样做。我搜索相关材料但无法找到答案。数据文件是关于维基百科的文章内容,是一个非常庞大的文件。所以任何帮助都会非常有帮助。 我也试过这个方法 Import .db file into 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"

任何帮助都将受到高度赞赏,对我非常有帮助。

1 个答案:

答案 0 :(得分:0)

clean.variable.nameProjectManager包中的一个函数,用于清除指定数据库中表的文件名。例如,它将名为data_table的数据库表转换为data.table

.TargetEnvProjectManager包中指向.GlobalVariable的变量(请参阅here)。因此,如果您手动将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访问导入的数据库表。