1 つのオプションは、ループ内で SQL 文字列を操作することです。現時点では、文字列リテラルは'df[2]'
R によって文字以外のものとして解釈されません。df
あなたの Q は明らかにデータ フレームではないため (これは文字ベクトルです!) 、私の答えにはあいまいさがいくつかあります。このようなものは、あなたが望むことをします。
出力を数値ベクトルに格納します。
require(RMySQL)
df <- c('a','b','c')
out <- numeric(length(df))
names(out) <- df
これで、 の要素をループしてdf
、クエリを 3 回実行できます。ループを 2 つの方法で設定できます。i) とのi
要素を参照するために使用する番号として、または ii)の各要素として順番に (つまり、その後、...)。以下に両方のバージョンを示します。df
out
i
df
a
b
## Version i
for(i in seq_along(df)) {
SQL <- paste("SELECT max(ID) FROM table WHERE columna='", df[i], "';", sep = "")
out[i] <- dbGetQuery(con, SQL)
dbDisconnect(con)
}
また:
## Version ii
for(i in df) {
SQL <- paste("SELECT max(ID) FROM table WHERE columna='", i, "';", sep = "")
out[i] <- dbGetQuery(con, SQL)
dbDisconnect(con)
}
どちらを使用するかは、個人の好みによって異なります。out
2 番目の (ii) バージョンでは、 内のデータと同じ名前を出力ベクトルに設定する必要がありますout
。
GROUP BY
とはいえ、実際の SQL クエリが投稿したものと似ていると仮定すると、句を使用して単一の SQL ステートメントでこれを実行して、計算する前にデータをグループ化することはできませんmax(ID)
か? このようにデータベースで単純なことを行うと、おそらくはるかに高速になります。残念ながら、MySQL のインスタンスが手元になく、現在 SQL-fu が弱いため、この例を示すことはできません。