Расширения SQLite
Если вы используете бэкэнд RSQLite, тогда RSQLite включает ряд функций, написанных на C, которые можно использовать из SQL, и sqldf делает их доступными.Смотрите ?initExtensions
в пакете RSQLite.Если один из них уже делает то, что вы хотите, то это может быть решением.
Добавление функций SQL
Из различных поддерживаемых бэкэндов SQLite позволяет добавлять функции C, H2 позволяет добавлять функции Java, а MySQL и PostgreSQL позволяют добавлять функции, написанные на SQL, с использованием CREATE FUNCTION.
Предварительная обработка текста оператора SQL
обратные пометки В общем, вы не можете смешивать R с вашими операторами SQL;однако вы можете выполнить предварительную текстовую обработку SQL, используя fn$sqldf(...)
, а затем $
для замены одного значения или обратных кавычек для замены результата выражения R.Например,
library(sqldf)
mySum <- function(x, y) paste(x, y, sep = "+")
fn$sqldf("select Time, demand, `mySum('Time', 'demand')` total from BOD", verbose = TRUE)
дает следующее, где я добавил стрелку в конце строки, которая показывает оператор, фактически переданный в бэкэнд.
sqldf: library(RSQLite)
sqldf: m <- dbDriver("SQLite")
sqldf: connection <- dbConnect(m, dbname = ":memory:")
sqldf: initExtension(connection)
sqldf: dbWriteTable(connection, 'BOD', BOD, row.names = FALSE)
sqldf: dbGetQuery(connection, 'select Time, demand, Time+demand total from BOD') <--
sqldf: dbDisconnect(connection)
Time demand total
1 1 8.3 9.3
2 2 10.3 12.3
3 3 19.0 22.0
4 4 16.0 20.0
5 5 15.6 20.6
6 7 19.8 26.8
См. ?fn
впакет gsubfn и обратите внимание, что пакет gsubfn автоматически становится доступным для sqldf, поэтому вам не требуется оператор library
.
знак доллара Выше приведен пример использования обратных галочек,Вот пример использования $ для того же.Вывод будет таким же.
mySum <- function(x, y) paste(x, y, sep = "+")
total <- mySum("Time", "demand")
fn$sqldf("select Time, demand, $total total from BOD")