Запрос RSQLite с указанной пользователем переменной в поле Thile [дубликат
Вопрос
Этот вопрос уже имеет ответ здесь:
- Динамическая «строка» в R 2 ответа
Я использую RSQLite
Библиотека в R In, чтобы управлять набором данных, который слишком велик для оперативной памяти. Для каждой регрессии я запрашиваю базу данных, чтобы получить финансовый год за раз. Теперь у меня есть фискальный год в жестком законе:
data.annual <- dbGetQuery(db, "SELECT * FROM annual WHERE fyear==2008")
Я хотел бы сделать финансовый год (2008 выше), чтобы внести изменения немного проще (и дурачиться). Есть ли способ, которым я могу пройти переменную в строку SQL Query? Я хотел бы использовать:
fiscal.year <- 2008
data.annual <- dbGetQuery(db, "SELECT * FROM annual WHERE fyear==fiscal.year")
Решение
SQLite будет видеть только строку, переданную на запрос, так что вы делаете, это что-то вроде
sqlcmd <- paste("SELECT * FROM annual WHERE fiscal=", fiscal.year, sep="")
data.annual <- dbGetQuery(db, sqlcmd)
Приятно, что вы можете использовать это обычным способом распечатать петли. Забыть на секунду, что у вас есть ограничения RAM, концептуально вы можете сделать
years <- seq(2000,2010)
data <- lapply(years, function(y) {
dbGetQuery(db, paste("SELECT * FROM annual WHERE fiscal=", y, sep="")
}
И теперь данные - это список, содержащий все ваши ежегодные наборы данных. Или вы могли бы сохранить данные, запускать регрессию и хранить только сводный объект.
Другие советы
Ответ Дирка - это место. Одна маленькая вещь, которую я пытаюсь сделать, это изменить форматирование для удобного тестирования. Кажется, я должен вырезать и вставлять текст SQL в редактор SQL много раз. Так что я отформатирую так:
sqlcmd <- paste("
SELECT *
FROM annual
WHERE fiscal=
", fiscal.year, sep="")
data.annual <- dbGetQuery(db, sqlcmd)
Это просто упрощает вырезать и вставлять биты SQL в / выделение для тестирования в вашей среде DB-запроса. Нет большого значения с коротким запросом, но может стать громоздким с более длинной строкой SQL.