Это известно и намеренно: sqldf
никогда не пытается обновить объекты в среде. Он просто действует как канал, копируя данные в базу данных sqlite (temp) и выполняя запрос, и пакет никогда не собирается перезаписывать исходные объекты в вызывающей среде.
Справочный материал FAQ 8 в sqldf
README :
Хотя фреймы данных, на которые ссылаются операторы SQL, переданные в sqldf, автоматически импортируются в SQLite, sqldf ничего не экспортирует из соображений безопасности. Таким образом, если вы обновляете таблицу с использованием sqldf, вы должны явно вернуть ее, как показано в примерах ниже.
Использование ваших данных:
sqldf(c("
UPDATE temp
set column1=100
WHERE column2 ='c'
", "select * from main.temp"))
# Warning in result_fetch(res@ptr, n = n) :
# SQL statements must be issued with dbExecute() or dbSendStatement() instead of dbGetQuery() or dbSendQuery().
# column1 column2
# 1 1 a
# 2 2 b
# 3 100 c
# 4 4 d
(Вы можете спокойно проигнорировать это предупреждение, это потому, что первый оператор ничего не возвращает.)
Таким образом, чтобы фактически использовать это для обновления объекта на месте в вашей среде, вам нужно будет захватить вывод самостоятельно.
temp
# column1 column2
# 1 1 a
# 2 2 b
# 3 3 c
# 4 4 d
temp <- suppressWarnings(sqldf(c("
UPDATE temp
set column1=100
WHERE column2 ='c'
", "select * from main.temp")))
temp
# column1 column2
# 1 1 a
# 2 2 b
# 3 100 c
# 4 4 d