Как убрать предупреждения в sqldf при использовании update, delete или alter table - PullRequest
0 голосов
/ 16 марта 2020

Ниже приведен воспроизводимый пример с предупреждениями. Я провел некоторые исследования, и некоторые говорят, что это вызвано версией RSQLITE, но я не уверен, какая версия, поэтому есть ли способ предотвратить эти предупреждения в sqldf. Заранее спасибо

(mt <- mtcars[1:5,1:5])
sqldf(c('update mt set cyl=5 where cyl>5', 'select * from mt'))

Предупреждение: В result_fetch (res@ptr, n = n): SQL операторы должны быть выполнены с dbExecute () или dbSendStatement () вместо dbGetQuery () или dbSendQuery ( ).

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Эта оболочка заглушает это конкретное предупреждение, не мешая другим.

sqldf2 <- function(...) {
  withCallingHandlers(sqldf(...), warning = 
    function(w) if (grepl("SQL statements must be issued with dbExecute", w)) 
      invokeRestart("muffleWarning") else w)
}

sql <- c("update BOD set Time = 1 where Time = 2", "select * from BOD")
sqldf2(sql)

, выдавая следующее без предупреждения:

  Time demand
1    1    8.3
2    1   10.3  <-- Time was updated from 2 to 1 on this line
3    3   19.0
4    4   16.0
5    5   15.6
6    7   19.8
0 голосов
/ 16 марта 2020

Вы можете подавить предупреждения глобально, а затем сбросить их после запуска кода:

Как подавить предупреждения глобально в скрипте R

Это работает:

oldw <- getOption("warn")
options(warn = -1)
(mt <- mtcars[1:5,1:5])
sqldf(c('update mt set cyl=5 where cyl>5', 'select * from mt'))
options(warn = oldw)
...