Я программно выбираю набор наборов данных, многие из которых имеют глупые имена, которые начинаются с цифр и имеют в них специальные символы, такие как минусовые знаки. Поскольку ни один из наборов данных не является особо большим, и я хотел, чтобы преимущество R максимально приближалось к типам данных, я (ab) использовал dplyr, чтобы сбрасывать эти таблицы в SQLite.Имена таблиц с экранированными скобками с dplyr
Я использую квадратные скобки, чтобы избежать ужасных имен таблиц, но это, похоже, не работает. Например:
data(iris)
foo.db <- src_sqlite("foo.sqlite3", create = TRUE)
copy_to(foo.db, df=iris, name="[14m3-n4m3]")
Это приводит к сообщению об ошибке:
Error in sqliteSendQuery(conn, statement, bind.data) : error in statement: no such table: 14m3-n4m3
Это работает, если я выбираю осмысленное имя. Однако, по разным причинам, я действительно хотел бы сохранить громоздкие имена. Я также в состоянии создать такую плохо с именем таблицы непосредственно из SQLite:
sqlite> create table [14m3-n4m3](foo,bar,baz);
sqlite> .tables
14m3-n4m3
Без трещин в вещи слишком глубоко, это выглядит как dplyr обрабатывает квадратные скобки в некотором роде, что я не могу понять. Мое подозрение в том, что это ошибка, но я хотел сначала проверить здесь, чтобы убедиться, что я ничего не пропустил.
EDIT: Я забыл упомянуть случай, когда я просто передаю дьявольское имя непосредственно в dplyr. Это приводит к следующим ошибкам:
library(dplyr)
data(iris)
foo.db <- src_sqlite("foo.sqlite3", create = TRUE)
copy_to(foo.db, df=iris, name="14M3-N4M3")
Error in sqliteSendQuery(conn, statement, bind.data) :
error in statement: unrecognized token: "14M3"
Это всего лишь предположение, но это может быть из-за соглашений об именах R. Один из возможных способов обхода, который я нашел, - использовать 'name = gsub (" [.] "," ", Make.names (" [14m3-n4m3] "))'. Если вы это сделали, вы все равно можете передать свои исходные имена в 'copy_to()', хотя они будут немного отличаться в данных. Не уверен, что это помогает, но это мои два цента.Очень хороший вопрос. –
Это лучшее обходное решение, чем то, что я начинал с реализации. Медленно разговаривая с мыслью о том, что хорошие имена + другие неприятности> плохие имена. – Peter
Я согласен с @RichardScriven - лучше изменить имена существующими инструментами, чем пытаться опрокинуть свои собственные! –