Этот вопрос часто задаваемый. См. FAQ 8 на домашней странице sqldf github .
Операция действительно работает. Сообщение является предупреждением, а не сообщением об ошибке. Сообщение вводит в заблуждение, и вы можете игнорировать его. Обратите внимание, что в вопросе не было отображено полное сообщение - в завершенном сообщении указано, что оно является предупреждением.
Предупреждение приходит от RSQLite, а не от самого sqldf. Это вызвано не обратно совместимым изменением, которое было введено в RSQLite в какой-то момент; однако, как указано, фактическая операция работает в любом случае.
Также delete
и update
действуют на таблицы в базе данных. Они не возвращают значения, поэтому даже если они работают, вы не увидите никакого результата. Если вы хотите получить результат, вы должны использовать оператор select
после delete
или update
для извлечения измененной таблицы.
Вот пример использования встроенной 6-строчной BOD data.frame , Он удаляет последнюю строку, так как эта строка имеет время больше 5.
library(sqldf)
sqldf(c("delete from BOD where Time > 5", "select * from BOD"))
## Time demand
## 1 1 8.3
## 2 2 10.3
## 3 3 19.0
## 4 4 16.0
## 5 5 15.6
## Warning message:
## In result_fetch(res@ptr, n = n) :
## SQL statements must be issued with dbExecute() or dbSendStatement() instead of dbGetQuery() or dbSendQuery().