Ich benutze tryCatch
eine Menge, um mögliche Fehlermeldungen in meinem R-Code zu erfassen, aber ich konfrontiert heute ein seltsames Problem mit ggplot
- und ich habe wirklich keine Ahnung, was los ist (auch nach einiger Zeit auf Google/SO-Suche).tryCatch und ggplot
Einfaches Beispiel mit einem unvollständigen ggplot
Anruf (ohne Zusatz-Schicht):
> tryCatch(eval(parse(text = 'ggplot(mtcars, aes(x=hp, y=wt))')), error = function(e) e)
Error: No layers in plot
So ist der Fehler nicht erfaßt wird. Mehr noch: Ich erhalte ein R-Objekt mit ggplot
Klasse:
> str(tryCatch(eval(parse(text = 'ggplot(mtcars, aes(x=hp, y=wt))')), error = function(e) e))
List of 8
$ data :'data.frame': 32 obs. of 11 variables:
..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
..$ cyl : num [1:32] 6 6 4 6 8 6 8 4 4 6 ...
..$ disp: num [1:32] 160 160 108 258 360 ...
..$ hp : num [1:32] 110 110 93 110 175 105 245 62 95 123 ...
..$ drat: num [1:32] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
..$ wt : num [1:32] 2.62 2.88 2.32 3.21 3.44 ...
..$ qsec: num [1:32] 16.5 17 18.6 19.4 17 ...
..$ vs : num [1:32] 0 0 1 1 0 1 0 1 1 1 ...
..$ am : num [1:32] 1 1 1 0 0 0 0 0 0 0 ...
..$ gear: num [1:32] 4 4 4 3 3 3 3 4 4 4 ...
..$ carb: num [1:32] 4 4 1 1 2 1 4 2 2 4 ...
$ layers : list()
$ scales :Reference class 'Scales' [package "ggplot2"] with 1 fields
..$ scales: NULL
..and 20 methods, of which 9 are possibly relevant:
.. add, clone, find, get_scales, has_scale, initialize, input, n,
.. non_position_scales
$ mapping :List of 2
..$ x: symbol hp
..$ y: symbol wt
$ options :List of 1
..$ labels:List of 2
.. ..$ x: chr "hp"
.. ..$ y: chr "wt"
$ coordinates:List of 1
..$ limits:List of 2
.. ..$ x: NULL
.. ..$ y: NULL
..- attr(*, "class")= chr [1:2] "cartesian" "coord"
$ facet :List of 1
..$ shrink: logi TRUE
..- attr(*, "class")= chr [1:2] "null" "facet"
$ plot_env :<environment: R_GlobalEnv>
- attr(*, "class")= chr "ggplot"
Irgendwelche Ideen, diese Art von Fehlern zu erfassen?
aktualisieren: Ich bin die Tatsache bewusst, dass der oben genannte Aufruf in einigen Situationen in Ordnung sein könnte (wie eine Schicht später hinzufügen). Aber dann beachten Sie bitte das folgende Beispiel (bitte beachten Sie, dass wir einen Tippfehler dort haben: t
auf y
Achse vorgesehen ist, statt wt
):
> tryCatch(eval(parse(text = 'ggplot(mtcars, aes(x=hp, y=t)) + geom_point()')), error = function(e) e)
Error in data.frame(x = c(110, 110, 93, 110, 175, 105, 245, 62, 95, 123, :
arguments imply differing number of rows: 32, 0
ich die Fehlermeldung, aber das ist nicht von tryCatch
erfasst.
Super, vielen Dank! Wie konnte ich das verpassen? :) Es war ziemlich offensichtlich nach einem Blick auf Ihre erste Zeile, aber diese Frage gab mir ein paar Stunden Kopfschmerzen davor. Also kurz: Nochmals vielen Dank :) – daroczig
Ich bin froh, dass ich helfen konnte! Manchmal kann man einfach zu nah am Code sein ... – Andrie