if(is.null(getOption("sqldf.driver")) && !requireNamespace("RSQLite", quietly=TRUE)) {
message("Please configure `options(sqldf.driver)` or install RSQLite to run below examples.")
} else {
data(iris, envir=environment())
# head
sqldf("select * from iris limit 5")
# Filter
sqldf("select * from iris where species = 'virginica' limit 5 ")
# Parameterized query
sqldf("select * from iris where species = ? limit 5", "versicolor")
# Aggregate, quoting
sqldf('select species, avg("Petal.Width") from iris group by 1 limit 5')
# Compare with aggregate(Petal.Width~Species, iris, FUN = var)
# CTE, back join
sqldf('
with tbl_width as (
select species, avg("Petal.Width") as xbar, count(1) as n
from iris
group by 1
)
select Species,
1.0/(n-1) * sum(("Petal.Width" - xbar)*("Petal.Width" - xbar)) as var
from iris
join tbl_width using (species)
group by 1
')
}
if(!requireNamespace("RSQLite", quietly=TRUE)) {
message("Below examples require RSQLite specifically.")
} else {
# Manually managing the DB connection, and writing to a database
conn <- DBI::dbConnect(RSQLite::SQLite(), tempfile())
data(mtcars, envir=environment())
sqldf("create table usacars as select * from mtcars where am = 1", conn=conn, tx='commit')
#Now compare
DBI::dbListTables(conn)
# vs persisted tables
sqldf("SELECT type, name FROM sqlite_schema", conn=conn)
# hang up and reconnect
DBI::dbDisconnect(conn)
conn <- DBI::dbConnect(conn)
DBI::dbListTables(conn)
sqldf("SELECT cyl, count(1) as n from usacars group by 1", conn=conn)
DBI::dbDisconnect(conn)
}
Run the code above in your browser using DataLab