Character als Übergabeparameter

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
jessi
Beiträge: 100
Registriert: Mo Jul 10, 2017 9:23 am

Character als Übergabeparameter

Beitrag 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
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Character als Übergabeparameter

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Character als Übergabeparameter

Beitrag 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...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
jessi
Beiträge: 100
Registriert: Mo Jul 10, 2017 9:23 am

Re: Character als Übergabeparameter

Beitrag 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
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Character als Übergabeparameter

Beitrag von jogo »

das Quoten der Anführungszeichen bitte nicht vergessen:

Code: Alles auswählen

(" ... AND (element = \"",ele,"\");") 
jessi
Beiträge: 100
Registriert: Mo Jul 10, 2017 9:23 am

Re: Character als Übergabeparameter

Beitrag 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
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Character als Übergabeparameter

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten