Hola Carlos: Gracias por responder! Ayer caí en esta página al buscar el problema con google, pero no conseguir entender y implementar lo que sugiere. Sin entender nada, lo que hice fue: =======================> library(MASS)> library (sqldf) # Per SQL > data(Aids2, package="MASS") > SQL_PROVA = function (XDADES, XWHE)+ { + XDADES_SQL = sqldf ("select * from $XDADES $XWHE") + return(XDADES_SQL) + }> DADES_SEL = SQL_PROVA (XDADES = birthwt, XWHE = "where age < '40'")Error in sqliteSendQuery(con, statement, bind.data) : error in statement: near "$XDADES": syntax error ======================= Evidentemente da error. Tampoco funcionaba si introducía \"age\" en el agumento del where: =======================> DADES_SEL = SQL_PROVA (XDADES = birthwt, XWHE = "where \"age\" < '40'") Error in sqliteSendQuery(con, statement, bind.data) : error in statement: near "$XDADES": syntax error ======================= He buscado ejemplos con google. pero no he encontrado nada. Gracias y saludos. On Mon, 27 Jul 2015 12:45:50 +0200 Carlos Ortega <cof en qualityexcellence.es> wrote:> Hola, > > Mira la página de "sqldf" en GitHub, viene un ejemplo, entre otras muchas > cosas, que lo explica: > > https://github.com/ggrothendieck/sqldf#Example_5._Insert_Variables > > #------------------------------ > # 5 > minSL <- 7 > limit <- 3 > fn$sqldf('select * from iris where "Sepal.Length" > $minSL limit $limit') > #------------------------------ > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > 2015-07-27 12:00 GMT+02:00 Griera <griera en yandex.com>: > > > Hola: > > > > No consigo que la función sqldf () funcione dentro de una función. Alguien > > puede echarme una mano. En resumen, el problema es que cuando lo ejecuto > > fuera de una función no tengo ningún problema: > > > > =========================> > > # install.packages("sqldf") > > > library(MASS) > > > library (sqldf) > > > data(Aids2, package="MASS") > > > options(digits=3) > > > > > table (Aids2$state) > > NSW Other QLD VIC > > 1780 249 226 588 > > > > > max (Aids2$age) > > [1] 82 > > > > > # Sin función: > > > DADES_SEL = sqldf ("select * from Aids2 where state in ('NSW', 'QLD') > > and age < 40") > > > > > table (DADES_SEL$state) > > NSW Other QLD VIC > > 1102 0 128 0 > > > > > max (DADES_SEL$age) > > [1] 39 > > =========================> > > > Pero dentro de una función no se como pasarle los argumentos para que > > funcione: > > > > =========================> > > SQL_PROVA = function (XDADES, XWHE) > > + { > > + XDADES_SQL = sqldf (paste ("select * from", XDADES, XWHE, sep = " ")) > > + return(XDADES_SQL) > > + } > > > DADES_SEL = SQL_PROVA (XDADES = birthwt, XWHE = "where age < '40'") > > Error in sqliteSendQuery(con, statement, bind.data) : > > error in statement: near "fromc": syntax error > > =========================> > > > Alguien puede ayudarme y decir que estoy haciendo mal? El problema debe > > estar en el "paste" ya que si coloco la orden original funciona: > > > > =========================> > > SQL_PROVA = function (XDADES, XWHE) > > + { > > + XDADES_SQL2 = sqldf ("select * from Aids2 where state in ('NSW', > > 'QLD') and age < 40") > > + return(XDADES_SQL2) > > + } > > > > > DADES_SEL2 = SQL_PROVA (XDADES = birthwt, XWHE = "where age < '40'") > > > > > table (DADES_SEL2$state) > > NSW Other QLD VIC > > 1102 0 128 0 > > > > > max (DADES_SEL2$age) > > [1] 39 > > =========================> > > > Muchas gracias y saludos. > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es en r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es
Puedes construir la query de esta otra forma y sí que funciona: #---------------- library(MASS) library(sqldf) # Per SQL data(Aids2, package="MASS") SQL_PROVA = function (XDADES, XWHE ) { cad_ena <- paste("select * from", XDADES, XWHE, sep=" ") XDADES_SQL <- sqldf(cad_ena) return(XDADES_SQL) } DADES_SEL = SQL_PROVA(XDADES = "birthwt", XWHE = c("where age < 40") ) DADES_SEL #---------------- Fíjate también en cómo incluyo los parámetros de la llamada en la función. Saludos, Carlos Ortega www.qualityexcellence.es 2015-07-27 14:14 GMT+02:00 Griera-yandex <griera en yandex.com>:> Hola Carlos: > > Gracias por responder! > > Ayer caí en esta página al buscar el problema con google, pero no > conseguir entender y implementar lo que sugiere. Sin entender nada, lo que > hice fue: > > =======================> > library(MASS) > > library (sqldf) # Per SQL > > data(Aids2, package="MASS") > > SQL_PROVA = function (XDADES, XWHE) > + { > + XDADES_SQL = sqldf ("select * from $XDADES $XWHE") > + return(XDADES_SQL) > + } > > DADES_SEL = SQL_PROVA (XDADES = birthwt, XWHE = "where age < '40'") > Error in sqliteSendQuery(con, statement, bind.data) : > error in statement: near "$XDADES": syntax error > =======================> > Evidentemente da error. > > Tampoco funcionaba si introducía \"age\" en el agumento del where: > > =======================> > DADES_SEL = SQL_PROVA (XDADES = birthwt, XWHE = "where \"age\" < '40'") > Error in sqliteSendQuery(con, statement, bind.data) : > error in statement: near "$XDADES": syntax error > =======================> > He buscado ejemplos con google. pero no he encontrado nada. > > Gracias y saludos. > > > On Mon, 27 Jul 2015 12:45:50 +0200 > Carlos Ortega <cof en qualityexcellence.es> wrote: > > > Hola, > > > > Mira la página de "sqldf" en GitHub, viene un ejemplo, entre otras muchas > > cosas, que lo explica: > > > > https://github.com/ggrothendieck/sqldf#Example_5._Insert_Variables > > > > #------------------------------ > > # 5 > > minSL <- 7 > > limit <- 3 > > fn$sqldf('select * from iris where "Sepal.Length" > $minSL limit $limit') > > #------------------------------ > > > > Saludos, > > Carlos Ortega > > www.qualityexcellence.es > > > > > > 2015-07-27 12:00 GMT+02:00 Griera <griera en yandex.com>: > > > > > Hola: > > > > > > No consigo que la función sqldf () funcione dentro de una función. > Alguien > > > puede echarme una mano. En resumen, el problema es que cuando lo > ejecuto > > > fuera de una función no tengo ningún problema: > > > > > > =========================> > > > # install.packages("sqldf") > > > > library(MASS) > > > > library (sqldf) > > > > data(Aids2, package="MASS") > > > > options(digits=3) > > > > > > > table (Aids2$state) > > > NSW Other QLD VIC > > > 1780 249 226 588 > > > > > > > max (Aids2$age) > > > [1] 82 > > > > > > > # Sin función: > > > > DADES_SEL = sqldf ("select * from Aids2 where state in ('NSW', 'QLD') > > > and age < 40") > > > > > > > table (DADES_SEL$state) > > > NSW Other QLD VIC > > > 1102 0 128 0 > > > > > > > max (DADES_SEL$age) > > > [1] 39 > > > =========================> > > > > > Pero dentro de una función no se como pasarle los argumentos para que > > > funcione: > > > > > > =========================> > > > SQL_PROVA = function (XDADES, XWHE) > > > + { > > > + XDADES_SQL = sqldf (paste ("select * from", XDADES, XWHE, sep = " > ")) > > > + return(XDADES_SQL) > > > + } > > > > DADES_SEL = SQL_PROVA (XDADES = birthwt, XWHE = "where age < '40'") > > > Error in sqliteSendQuery(con, statement, bind.data) : > > > error in statement: near "fromc": syntax error > > > =========================> > > > > > Alguien puede ayudarme y decir que estoy haciendo mal? El problema debe > > > estar en el "paste" ya que si coloco la orden original funciona: > > > > > > =========================> > > > SQL_PROVA = function (XDADES, XWHE) > > > + { > > > + XDADES_SQL2 = sqldf ("select * from Aids2 where state in ('NSW', > > > 'QLD') and age < 40") > > > + return(XDADES_SQL2) > > > + } > > > > > > > DADES_SEL2 = SQL_PROVA (XDADES = birthwt, XWHE = "where age < '40'") > > > > > > > table (DADES_SEL2$state) > > > NSW Other QLD VIC > > > 1102 0 128 0 > > > > > > > max (DADES_SEL2$age) > > > [1] 39 > > > =========================> > > > > > Muchas gracias y saludos. > > > > > > _______________________________________________ > > > R-help-es mailing list > > > R-help-es en r-project.org > > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > > > > > > -- > > Saludos, > > Carlos Ortega > > www.qualityexcellence.es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Gracias, Carlos! Como siempre, funciona a la perfección lo que propones: ===============================> library(MASS)> library (sqldf) # Per SQL > data(Aids2, package="MASS") > table (Aids2$state)NSW Other QLD VIC 1780 249 226 588> max (Aids2$age)[1] 82> SQL_PROVA = function (XDADES, XWHE )+ { + cad_ena <- paste("select * from", XDADES, XWHE, sep=" ") + XDADES_SQL <- sqldf(cad_ena) + return(XDADES_SQL) + }> DADES_SEL = SQL_PROVA(XDADES = "Aids2", XWHE = c("where state in ('NSW', 'QLD') and age < 40") )> table (DADES_SEL$state)NSW Other QLD VIC 1102 0 128 0> max (DADES_SEL$age)[1] 39 =============================== Gracias de nuevo!! Saludos! On Mon, 27 Jul 2015 16:01:49 +0200 Carlos Ortega <cof en qualityexcellence.es> wrote:> Puedes construir la query de esta otra forma y sí que funciona: > > #---------------- > library(MASS) > library(sqldf) # Per SQL > data(Aids2, package="MASS") > SQL_PROVA = function (XDADES, XWHE ) > { > cad_ena <- paste("select * from", XDADES, XWHE, sep=" ") > XDADES_SQL <- sqldf(cad_ena) > return(XDADES_SQL) > } > DADES_SEL = SQL_PROVA(XDADES = "birthwt", XWHE = c("where age < 40") ) > DADES_SEL > #---------------- > > Fíjate también en cómo incluyo los parámetros de la llamada en la función. > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > > 2015-07-27 14:14 GMT+02:00 Griera-yandex <griera en yandex.com>: > > > Hola Carlos: > > > > Gracias por responder! > > > > Ayer caí en esta página al buscar el problema con google, pero no > > conseguir entender y implementar lo que sugiere. Sin entender nada, lo que > > hice fue: > > > > =======================> > > library(MASS) > > > library (sqldf) # Per SQL > > > data(Aids2, package="MASS") > > > SQL_PROVA = function (XDADES, XWHE) > > + { > > + XDADES_SQL = sqldf ("select * from $XDADES $XWHE") > > + return(XDADES_SQL) > > + } > > > DADES_SEL = SQL_PROVA (XDADES = birthwt, XWHE = "where age < '40'") > > Error in sqliteSendQuery(con, statement, bind.data) : > > error in statement: near "$XDADES": syntax error > > =======================> > > > Evidentemente da error. > > > > Tampoco funcionaba si introducía \"age\" en el agumento del where: > > > > =======================> > > DADES_SEL = SQL_PROVA (XDADES = birthwt, XWHE = "where \"age\" < '40'") > > Error in sqliteSendQuery(con, statement, bind.data) : > > error in statement: near "$XDADES": syntax error > > =======================> > > > He buscado ejemplos con google. pero no he encontrado nada. > > > > Gracias y saludos. > > > > > > On Mon, 27 Jul 2015 12:45:50 +0200 > > Carlos Ortega <cof en qualityexcellence.es> wrote: > > > > > Hola, > > > > > > Mira la página de "sqldf" en GitHub, viene un ejemplo, entre otras muchas > > > cosas, que lo explica: > > > > > > https://github.com/ggrothendieck/sqldf#Example_5._Insert_Variables > > > > > > #------------------------------ > > > # 5 > > > minSL <- 7 > > > limit <- 3 > > > fn$sqldf('select * from iris where "Sepal.Length" > $minSL limit $limit') > > > #------------------------------ > > > > > > Saludos, > > > Carlos Ortega > > > www.qualityexcellence.es > > > > > > > > > 2015-07-27 12:00 GMT+02:00 Griera <griera en yandex.com>: > > > > > > > Hola: > > > > > > > > No consigo que la función sqldf () funcione dentro de una función. > > Alguien > > > > puede echarme una mano. En resumen, el problema es que cuando lo > > ejecuto > > > > fuera de una función no tengo ningún problema: > > > > > > > > =========================> > > > > # install.packages("sqldf") > > > > > library(MASS) > > > > > library (sqldf) > > > > > data(Aids2, package="MASS") > > > > > options(digits=3) > > > > > > > > > table (Aids2$state) > > > > NSW Other QLD VIC > > > > 1780 249 226 588 > > > > > > > > > max (Aids2$age) > > > > [1] 82 > > > > > > > > > # Sin función: > > > > > DADES_SEL = sqldf ("select * from Aids2 where state in ('NSW', 'QLD') > > > > and age < 40") > > > > > > > > > table (DADES_SEL$state) > > > > NSW Other QLD VIC > > > > 1102 0 128 0 > > > > > > > > > max (DADES_SEL$age) > > > > [1] 39 > > > > =========================> > > > > > > > Pero dentro de una función no se como pasarle los argumentos para que > > > > funcione: > > > > > > > > =========================> > > > > SQL_PROVA = function (XDADES, XWHE) > > > > + { > > > > + XDADES_SQL = sqldf (paste ("select * from", XDADES, XWHE, sep = " > > ")) > > > > + return(XDADES_SQL) > > > > + } > > > > > DADES_SEL = SQL_PROVA (XDADES = birthwt, XWHE = "where age < '40'") > > > > Error in sqliteSendQuery(con, statement, bind.data) : > > > > error in statement: near "fromc": syntax error > > > > =========================> > > > > > > > Alguien puede ayudarme y decir que estoy haciendo mal? El problema debe > > > > estar en el "paste" ya que si coloco la orden original funciona: > > > > > > > > =========================> > > > > SQL_PROVA = function (XDADES, XWHE) > > > > + { > > > > + XDADES_SQL2 = sqldf ("select * from Aids2 where state in ('NSW', > > > > 'QLD') and age < 40") > > > > + return(XDADES_SQL2) > > > > + } > > > > > > > > > DADES_SEL2 = SQL_PROVA (XDADES = birthwt, XWHE = "where age < '40'") > > > > > > > > > table (DADES_SEL2$state) > > > > NSW Other QLD VIC > > > > 1102 0 128 0 > > > > > > > > > max (DADES_SEL2$age) > > > > [1] 39 > > > > =========================> > > > > > > > Muchas gracias y saludos. > > > > > > > > _______________________________________________ > > > > R-help-es mailing list > > > > R-help-es en r-project.org > > > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > > > > > > > > > > > -- > > > Saludos, > > > Carlos Ortega > > > www.qualityexcellence.es > > > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es