Une option consiste à manipuler la chaîne SQL dans la boucle. Au moment où vous avez un littéral de chaîne, le 'df[2]'
n'est pas interprété par R comme autre chose que des caractères. Il y aura des ambiguïtés dans ma réponse, parce que df
dans votre Q n'est manifestement pas une trame de données (c'est un vecteur de caractère!). Quelque chose comme ça fera ce que vous voulez.
magasin la sortie dans un vecteur numérique:
require(RMySQL)
df <- c('a','b','c')
out <- numeric(length(df))
names(out) <- df
Maintenant, nous pouvons boucler sur les éléments de df
pour exécuter votre requête trois fois. Nous pouvons régler la boucle de deux façons différentes: i) avec i
comme un nombre que nous utilisons pour référencer les éléments de df
et out
, ou ii) avec i
que chaque élément de df
à son tour (c.-à-a
, puis b
, ...). Je vais montrer les deux versions ci-dessous.
## 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)
}
OU:
## Version ii
for(i in df) {
SQL <- paste("SELECT max(ID) FROM table WHERE columna='", i, "';", sep = "")
out[i] <- dbGetQuery(con, SQL)
dbDisconnect(con)
}
que vous utilisez dépendra de goût personnel. La deuxième version (ii) vous oblige à définir des noms sur le vecteur de sortie out
qui sont les mêmes que les données à l'intérieur out
. Cela dit, en supposant que votre requête SQL réelle est similaire à celle que vous publiez, ne pouvez-vous pas le faire en une seule instruction SQL, en utilisant la clause GROUP BY
, pour regrouper les données avant de calculer max(ID)
? Faire des choses simples dans la base de données comme celle-ci sera probablement beaucoup plus rapide. Malheureusement, je n'ai pas d'instance MySQL pour jouer avec et mon SQL-fu est actuellement faible, donc je ne peux pas donner un exemple de cela.
Duplication de [Requête RSQLite avec variable spécifiée par l'utilisateur dans le champ WHERE] (http://stackoverflow.com/q/3449666/271616) –
Joshua, merci d'avoir signalé cela. c'est une excellente réponse aussi. J'avais cherché des solutions RMySQL. – analyticsPierce
la solution est la même, que vous utilisiez RMySQL ou RSQLlite. –