Seite 1 von 1

Character als Übergabeparameter

Verfasst: Mi Sep 27, 2017 8:36 am
von jessi
Guten Morgen,

ich bastle gerade an einem Code und um Fehler soweit als möglich zu vermeiden, möchte ich den Code gerne so aufbereiten, dass die variierenden Parameter als Übergabeparameter definiert sind. Zu 90 % ist mir das auch gelungen, nur bei dem Parameter "element" funktioniert die Übergabe nicht. Bei "element" handelt es sich um einen Character mit den Einträgen "Wind", "Temperatur","Sonne", "Wolken".

So weit bin ich mal gekommen:

Code: Alles auswählen


str(daten)
$ datum: chr "20150101", "20150101"
$ zeit: chr "0000", "0015" 
$ phi: num 39.5 40.0
$ lam: num 12.2 12.5 
$element: chr "Wind" 

function(p,l,h,ele)
#lese_daten(48,16,1000,"Wind")
d <- dbGetQuery(conn,paste("SELECT * FROM data 
						WHERE (phi = ",p,")
						AND (lam = ",l,")
						AND (hoehe =",h,")
						AND (element = ",ele,"))                     
Die Übergabe von p, l und h funktioniert, bei element erkennt R die Übergabe nicht. Ich bekomme zwar keine Fehlermeldung, allerdings werden die Daten aller Elemente ausgelesen und nicht das, das ich gerne hätte.

Wäre toll, wenn mir jemand einen Tipp geben könnte, wie ich die Übergabe auch für character angeben kann.

Danke und liebe Grüße,
Jessi

Re: Character als Übergabeparameter

Verfasst: Mi Sep 27, 2017 10:47 am
von bigben
Hallo Jessi,

wenn man SQL-Kommandos mit paste zusammenbastelt, macht es fast immer Sinn, das Ergebnis von paste erstmal mit print oder cat anzuschauen:

Code: Alles auswählen

lese_daten <- function(p,l,h,ele)
  cat(paste("SELECT * FROM data 
                             WHERE (phi = ",p,")
                             AND (lam = ",l,")
                             AND (hoehe =",h,")
                             AND (element = ",ele,")))      
lese_daten(48,16,1000,"Wind")
Das wirft bei mir sofort einen Syntax Error, weil da in dem Paste ein Anführungszeichen auf aber nie wieder zu gemacht wird.
Machen wir es zu:

Code: Alles auswählen

lese_daten <- function(p,l,h,ele)
  cat(paste("SELECT * FROM data 
                             WHERE (phi = ",p,")
                             AND (lam = ",l,")
                             AND (hoehe =",h,")
                             AND (element = ",ele,");"))      
lese_daten(48,16,1000,"Wind")
Jetzt siehst Du, wie das SQL-Kommando aussieht, das Du zusammenbaut hast. Ich bin nicht so der SQL-Guru, daher weiß ich nicht, ob das ohne Anführungszeichen um "Wind" funktioniert. Ich denke, eher nicht?

LG,
Bernhard

Re: Character als Übergabeparameter

Verfasst: Mi Sep 27, 2017 9:20 pm
von EDi
Ich verweise mal noch auf

http://db.rstudio.com/

odbc + DBI + dplyr ist schon ne schicke kombi die auch hier das Leben einfacher machen könnte...

Re: Character als Übergabeparameter

Verfasst: Do Sep 28, 2017 11:20 am
von jessi
Hallo,

danke für eure Hinweise.

Das Anführungszeichen hatte ich, ich wohl beim Kopieren verloren gegangen. Leider hat es auch so nicht funktioniert.
Ich lese mich mal in den Link ein, den EDI angehängt hat.

Vielen Dank euch beiden.
Jessi

Re: Character als Übergabeparameter

Verfasst: Do Sep 28, 2017 12:58 pm
von jogo
das Quoten der Anführungszeichen bitte nicht vergessen:

Code: Alles auswählen

(" ... AND (element = \"",ele,"\");") 

Re: Character als Übergabeparameter

Verfasst: Fr Sep 29, 2017 7:55 am
von jessi
Guten Morgen zusammen,

vielen Dank für den Hinweis. Wenn ich den geänderten Code nun durchlaufen lassen, bekomme ich leider keine Werte (rows <(or 0-lenght row.names)

Code: Alles auswählen

d <- dbGetQuery(conn,paste("SELECT * FROM data 
						WHERE (phi = ",p,")
						AND (lam = ",l,")
						AND (hoehe =",h,")
						AND (element = \"",ele,"\");")           
An was könnte das denn liegen? Wenn ich das Element direkt übergebe, werden Werte ausgegeben.

Danke nochmals,
Grüße, Jessi

Re: Character als Übergabeparameter

Verfasst: Fr Sep 29, 2017 2:59 pm
von bigben
jessi hat geschrieben: Fr Sep 29, 2017 7:55 am (rows <(or 0-lenght row.names)
:?: :?:

Code: Alles auswählen

d <- dbGetQuery(conn,paste("SELECT * FROM data 
						WHERE (phi = ",p,")
						AND (lam = ",l,")
						AND (hoehe =",h,")
						AND (element = \"",ele,"\");")           
Ergibt das denn, mit cat oder print ausgegeben, jetzt den korrekten SQL-Code? Läuft dieser Code? Fehlt da nicht ein Klammer-zu?
Wenn ich das Element direkt übergebe, werden Werte ausgegeben.
Was bedeutet das?

LG,
Bernhard