我有一個SQLite數據庫連接到數據庫文件。我想從其中一個表中提取一些數據,在R中執行一些處理,然後在處理後的數據的同一連接上創建一個臨時表。它需要是臨時表,因爲用戶可能沒有對數據庫的寫訪問權限,但我希望能夠在數據庫中已有的數據旁邊查詢這些新數據。如何從R數據框添加SQLite臨時表?
如此,例如:
require(sqldf)
db <- dbConnect(SQLite(), "tempdb")
dbWriteTable(db, "iris", iris)
# do some processing in R:
d <- dbGetQuery(db, "SELECT Petal_Length, Petal_Width FROM iris;")
names(d) <- c("length_2", "width_2")
d <- exp(d)
,然後我想從d
做一個臨時表中的連接db
我知道我可以做的:
dbWriteTable(conn=db, name= "iris_proc", value = d)
,但我需要在臨時表中,並且在dbWriteTable
中似乎沒有此選項。我想到的
一個解決辦法是增加一個臨時表,然後添加列和更新它們:從d
dbGetQuery(db, "CREATE TEMP TABLE iris_proc AS SELECT Species FROM iris;")
dbGetQuery(db, "ALTER TABLE iris_proc ADD COLUMN length_2;")
但我不能得到的數據爲列:
dbGetQuery(db, paste("UPDATE iris2 SET length_2 =", paste(d$length_2, collapse = ", "), ";"))
Error in sqliteExecStatement(con, statement, bind.data) :
RS-DBI driver: (error in statement: near "4.05519996684467": syntax error)
我想,即使我得到這個工作,它將是非常低效的。
我想可能有一些方法可以用read.csv.sql做到這一點,但這似乎不適用於打開的連接對象。
使用的是開發版本,增加了一個'temporary'參數 – hadley