6

我正在使用RSQLiteR in 中的库来管理对于 RAM 来说太大的数据集。对于每个回归,我都会查询数据库以一次检索一个会计年度。现在我有硬编码的财政年度:

data.annual <- dbGetQuery(db, "SELECT * FROM annual WHERE fyear==2008")

我想让财政年度(以上 2008 年)使更改更容易(并且万无一失)。有没有办法可以将变量传递给 SQL 查询字符串?我很想使用:

fiscal.year <- 2008
data.annual <- dbGetQuery(db, "SELECT * FROM annual WHERE fyear==fiscal.year")
4

2 回答 2

10

SQLite 只会看到为查询传递下来的字符串,所以你所做的就像

  sqlcmd <- paste("SELECT * FROM annual WHERE fiscal=", fiscal.year, sep="")
  data.annual <- dbGetQuery(db, sqlcmd)

好消息是您可以使用这种通常的方式来展开循环。暂时忘记你有内存限制,从概念上讲你可以做到

  years <- seq(2000,2010)
  data <- lapply(years, function(y) {
     dbGetQuery(db, paste("SELECT * FROM annual WHERE fiscal=", y, sep="")
  }

现在 data 是一个包含所有年度数据集的列表。或者您可以保留数据,运行回归并仅存储摘要对象。

于 2010-08-10T14:01:21.927 回答
3

德克的回答是正确的。我尝试做的一件小事是更改格式以便于测试。似乎我必须多次将 SQL 文本剪切并粘贴到 SQL 编辑器中。所以我的格式是这样的:

sqlcmd <- paste("
   SELECT * 
   FROM annual 
   WHERE fiscal=
 ", fiscal.year, sep="")
data.annual <- dbGetQuery(db, sqlcmd)

这只是为了在您的数据库查询环境中进行测试而更容易地剪切和粘贴 SQL 位。简短的查询没什么大不了的,但是较长的 SQL 字符串会变得很麻烦。

于 2010-08-10T14:46:44.253 回答