Funktion zum Plotten in PDFs

For(), If(), While() und Verwandte. Diskussion von programmiertechnischen Fragen.

Funktion zum Plotten in PDFs

Beitragvon sunny01 » Do 2. Jun 2016, 20:36

Hallo,

ich möchte eine Funktion erstellen. Falls der Fall auftritt, dass ein Plot nicht gezeichnet werden kann, weil die Fehlermeldung
"figure margins are too large" erscheint, soll der Plot in eine PDF gezeichnet werden. Erscheint die Fehlermeldung nicht, so soll der Plot ganz normal in RStuidio gezeichnet werden.

Ich habe bisher folgenden Code:
Code: Alles auswählen
pdf_erstellen <- function(func){
  if(plot(func)=="error")
  {
    pdf(paste(toString(func), "pdf", sep="."),width=20, height=8.27)
    plot(func)
    dev.off()
  }
  else
  {
    plot(func)
  }
}


Leider funktionert der Code noch nicht. Tritt der Fall auf, dass der Plot nicht in RStudio gezeichnet werden kann, so kommt wieder die Warnung "figure margins are too large" und es passiert nichts weiter.
Tritt der Fall auf, dass die Funktion in RStudi geplottet werden kann, so passiert das gleiche.

Ich brauche quasi func einmal als Funktion und einmal als String. Mit toString() kommen irgendwelche Werte raus, aber nicht die Funktion als String an sich.

Kann mir bitte jemand weiterhelfen?


Grüße
sunny01
sunny01
 
Beiträge: 6
Registriert: Fr 29. Apr 2016, 21:23
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Funktion zum Plotten in PDFs

Beitragvon tau1234 » Fr 3. Jun 2016, 13:36

Hey sunny,

probier mal:
Code: Alles auswählen
tryCatch(expr = plot(x,y),
         error = function(e)
            {
              pdf("name.pdf")
              plot(x,y)
              dev.off()
         
            }
         )

also so wie du es gemacht hast nur mit tryCatch. So funktioniert es zumindest in meinem Spielzeugbeispiel.

Gruß
tau1234
 
Beiträge: 60
Registriert: Mi 4. Mai 2016, 11:17
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Funktion zum Plotten in PDFs

Beitragvon sunny01 » Fr 3. Jun 2016, 14:01

Hallo tau1234,

vielen Dank für deinen Vorschlag. Es funktioniert zwar so, aber ich möchte auch, dass der Dateiname nach der Funktion, die geplottet werden soll, benannt wird. Sonst wird ja die Datei bei verschiedenen Aufrufen immer überschrieben.

Außerdem würde ich gerne noch den Fall einbringen, dass die Warnung "margins are too large" eben mal nicht auftritt und dann automatisch ganz normal in RStudio geplottet wird. Sonst könnte ich ja auch die üblich pdf()-Funktion verwenden.


Grüße
sunny01
sunny01
 
Beiträge: 6
Registriert: Fr 29. Apr 2016, 21:23
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Funktion zum Plotten in PDFs

Beitragvon tau1234 » Fr 3. Jun 2016, 14:17

hey,

na das sollte ja eigentlich kein Problem sein oder? Du kannst doch deinen Code übernehmen und meinen einfach einsetzen. Also irgendwie so?!

Code: Alles auswählen
pdf_erstellen <- function(func){
 
tryCatch(expr = plot(x,y),
         error = function(e)
            {
              pdf(paste(toString(func), "pdf", sep="."),width=20, height=8.27)
              plot(func)
              dev.off()
         
            }
         )
   
 
}


Den zweiten Teil verstehe ich nicht. Erst willst, dass wenn der Fehler auftritt der Plot als PDF gespeichert wird und jetzt willst du den Fehler verhindern?
Oder ist das jetzt unabhängig voneinander?

Gruß
tau1234
 
Beiträge: 60
Registriert: Mi 4. Mai 2016, 11:17
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Funktion zum Plotten in PDFs

Beitragvon sunny01 » Fr 3. Jun 2016, 14:45

Hallo,

so habe ich es gerade probiert. Dann kommt die Fehlermeldung
" Error in pdf(paste(toString(func), ".pdf", sep = ""), width = 20, height = 8.27) : Dateiname in pdf() zu lang "
weil toString(func) einen String ergibt, der alle möglichen Vektoren enthält, die in func enthalten sind und nicht den Namen "func" an sich.

Zu deiner Frage: In der Funktion pdf_erstellen() soll geprüft werden, ob die Fehlermeldung "margins are too large" beim versuchten Plotten erscheinen würde. Ist dies der Fall, soll der Plot in einer PDF erstellt werden (weil es ja nicht anders geht). Ist dies nicht der Fall, soll der Plot in RStudio erstellt werden (weil es geht).
Ich möchte mir damit einfach ersparen, jedes Mal erstmal zu prüfen, ob es ohne PDF geht und dann den Code eintipseln zu müssen, um die PDF zu erstellen.

Grüße
sunny01
sunny01
 
Beiträge: 6
Registriert: Fr 29. Apr 2016, 21:23
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Funktion zum Plotten in PDFs

Beitragvon tau1234 » Fr 3. Jun 2016, 14:54

ja, haste Recht.

Hiermit sollte es funktionieren. Habe da gar nicht mehr drüber nachgedacht:
deparse(substitute(func))
damit bekommst du den variablen namen. Ich glaube, das ist ja was du suchst.

aber das tryCatch macht doch genau das. Es erstellt nur ein pdf, wenn du einen Error hast. Ansonsten wird es in R studio gezeigt.
tau1234
 
Beiträge: 60
Registriert: Mi 4. Mai 2016, 11:17
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Funktion zum Plotten in PDFs

Beitragvon sunny01 » Fr 3. Jun 2016, 15:07

Hallo,

jetzt funktioniert es:

Code: Alles auswählen
pdf_erstellen <- function(func){
  name <- deparse(substitute(func))
  tryCatch(expr = plot(func),
           error = function(e)
           {
             pdf(paste(name, ".pdf", sep=""),width=20, height=8.27)
             plot(func)
             dev.off()
           }
  )
}


Ja, du hast Recht, traCatch macht das schon. Ich habe mich bisher nicht soviel mit Fehlerbetrachtung beschäftigt ;)

Danke dir! :)

Grüße
sunny01
sunny01
 
Beiträge: 6
Registriert: Fr 29. Apr 2016, 21:23
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Funktion zum Plotten in PDFs

Beitragvon tau1234 » Sa 4. Jun 2016, 20:05

gerne :)
tau1234
 
Beiträge: 60
Registriert: Mi 4. Mai 2016, 11:17
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post


Zurück zu Programmierkonzepte

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron