tryCatch и ggplot

Я часто использую tryCatchдля захвата потенциальных сообщений об ошибках в моем коде R, но сегодня я столкнулся со странной проблемой сggplot-и я действительно понятия не имею, что происходит (даже после некоторого времени, потраченного на поиск в Google/SO ).

Простой пример с незавершенным ggplotвызовом (без добавления слоя):

> tryCatch(eval(parse(text = 'ggplot(mtcars, aes(x=hp, y=wt))')), error = function(e) e)
Error: No layers in plot

Так что ошибка не фиксируется. Более того, :я получаю объект R с классом ggplot:

> 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"

. Любые идеи для захвата такого рода ошибок?


Обновление:Я осознаю тот факт, что приведенный выше вызов может работать в некоторых ситуациях (, например добавление слоя позже ). Но тогда, пожалуйста, рассмотрите следующий пример (обратите внимание, что у нас там опечатка:tпредоставляется на оси yвместо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

Я получаю сообщение об ошибке, но оно не фиксируется tryCatch.

7
задан daroczig 2 August 2012 в 16:21
поделиться