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