6

Rのライブラリを使用して、RSQLiteRAM には大きすぎるデータ セットを管理しています。回帰ごとに、データベースにクエリを実行して一度に会計年度を取得します。これで、会計年度がハードコーディングされました。

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)

良い点は、ループを巻き戻す通常の方法でこれを使用できることです。RAM制限があることを少し忘れてください。概念的には実行できます

  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

ダークの答えは的確です。私がやろうとしている小さなことの1つは、簡単にテストできるようにフォーマットを変更することです。SQLテキストを何度も切り取ってSQLエディターに貼り付ける必要があるようです。だから私はこのようにフォーマットします:

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

これにより、DBクエリ環境でテストするためにSQLビットを切り取って貼り付けることが簡単になります。短いクエリでは大したことはありませんが、SQL文字列が長くなると面倒になる可能性があります。

于 2010-08-10T14:46:44.253 に答える