Хотя вы предоставили нам фрейм данных recession
, вы не предоставили нам фрейм данных quarterly_data
, в котором вы получаете сообщение об ошибке. Несколько указателей здесь, чтобы попробовать, но сначала, немного описания того, что измерить, вызывает эту проблему.
Прежде всего, time_trans
, кажется, из пакета весов , но не ясно, почему это должно выполняться на основе кода выше. Есть ли что-нибудь еще, что могло бы использовать пакет scales
здесь?
Теперь для самого сообщения об ошибке требуется только объект класса POSIXct
. Это отличается от объектов класса Date
, которые создаются из используемого вами пакета lubridate
, что очевидно из использования as_date
для создания фрейма данных recession
.
You Вы можете подтвердить это самостоятельно, запустив class(recession$date_start)
, и вы увидите, что на выходе получается объект класса Date
.
После функции ymd()
вы также получаете объект класса Date
. Из документации вы должны иметь возможность принудительно преобразовать класс для преобразования в POSIXct
POSIXt
, указав аргумент tz=
(часовой пояс). Вы можете увидеть это следующим образом:
> class(ymd(recession$date_start))
[1] "Date"
> class(ymd(recession$date_start, tz='GMT'))
[1] "POSIXct" "POSIXt"
Итак, это может решить вашу проблему. Но у вас все еще есть какая-то детективная работа, так как у нас нет вашего другого фрейма данных, и мы, очевидно, не видим функцию, которая пытается вызвать time_trans
из пакета scales
. Другая возможность здесь заключается в том, что ggplot
вызывает это для настройки оси на основе объекта POSIXt ... но я не вижу вызова scale_
или coord_flip()
, который мог бы вызвать эту ошибку. Я бы порекомендовал следующую последовательность:
Попробуйте подход "homerun", снова запустив функции ymd()
, но предоставив tz="GMT"
, чтобы вывод был объектом POSIXct. Не уверен, что это будет успешно.
запустите саму строку ggplot()
. Вы получаете ту же ошибку? Если это так, ошибка находится внутри фрейма данных quarterly_data
, а не фрейма данных recession
. Если это работает, запустите строку ggplot()
и добавьте объект geom_line()
. Если это все еще работает, то ваша проблема связана с функцией geom_rect
, которая, вероятно, означает фрейм данных recession
.
Проверьте класс объектов даты в quarterly_data
. Они Date
класс или POSIXct
класс? Если Date
, попробуйте преобразовать их в POSIXct
(возможно, просто используйте as.POSIXct()
).
Есть ли еще код, который принадлежит здесь из вашего вызова сюжета? Если у вас есть coord_flip()
или какие-либо scale_x
или другие тематические c элементы, которые добавлены в ваш код графика, они, безусловно, могут попытаться настроить шкалу времени и привести к этой ошибке.