[英]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.