簡體   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