sqldf R Ошибка создания таблицы - PullRequest
0 голосов
/ 13 июня 2018

Я провожу некоторые эксперименты с SQL в R с использованием пакета sqldf.Я пытаюсь проверить некоторые команды, чтобы проверить вывод, в частности я пытаюсь создать таблицы.

Здесь код:

sqldf("CREATE TABLE tbl1 AS
       SELECT cut
       FROM diamonds")

Очень простой код, однако я получаю эту ошибку

sqldf("CREATE TABLE tbl1 AS
+ SELECT cut
+       FROM diamonds")
data frame with 0 columns and 0 rows
Warning message:
In result_fetch(res@ptr, n = n) :
Don't need to call dbFetch() for statements, only for queries

Почему говорится, что таблица создается в виде 0 столбцов и 0 строк?Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 13 июня 2018

Это предупреждение, а не ошибка.Предупреждение вызвано обратной несовместимостью в последних версиях RSQLite.Вы можете игнорировать его, так как он работает в любом случае.

Оператор sqldf, показанный в вопросе

  • , создает пустую базу данных
  • , загружает фрейм данных diamondsк таблице с тем же именем в этой базе данных
  • запускает инструкцию create, которая создает в таблице вторую таблицу tbl1
  • ничего не возвращает (на самом деле фрейм данных строки 0 столбец 0 строка) поскольку оператор create не имеет значения
  • уничтожает базу данных

При использовании sqldf вам не нужны create операторы.Он автоматически создает таблицу в базе данных сервера для любого фрейма данных, на который ссылается ваш оператор sql, поэтому следующий оператор sqldf

sqldf("select * from diamonds")

  • создаст пустую базу данных
  • загрузить diamonds в нее
  • запустить оператор select
  • вернуть результат оператора select в виде фрейма данных
  • уничтожить базу данных

Вы можете использовать аргумент verbose=TRUE, чтобы увидеть отдельные вызовы низкоуровневого RSQLite (или другой серверной базы данных, если вы укажете другой бэкэнд):

sqldf("select * from diamonds limit 3", verbose = TRUE)

:

sqldf: library(RSQLite)
sqldf: m <- dbDriver("SQLite")
sqldf: connection <- dbConnect(m, dbname = ":memory:")
sqldf: initExtension(connection)
sqldf: dbWriteTable(connection, 'diamonds', diamonds, row.names = FALSE)
sqldf: dbGetQuery(connection, 'select * from diamonds limit 3')
sqldf: dbDisconnect(connection)
  carat     cut color clarity depth table price    x    y    z
1  0.23   Ideal     E     SI2  61.5    55   326 3.95 3.98 2.43
2  0.21 Premium     E     SI1  59.8    61   326 3.89 3.84 2.31
3  0.23    Good     E     VS1  56.9    65   327 4.05 4.07 2.31

Предложите вам подробный обзор help("sqldf"), а также информацию на домашней странице sqldf github

...