Если я правильно вас прочитал, вы спрашиваете, почему R не отображает даты в вашем регионе.Я согласен, было бы неплохо, если бы вы могли контролировать формат отображаемого объекта Date
, сохраняя его как объект Date
.Но нет реального способа без предоставления собственного расширения без малейших усилий.
Вот хак: переопределить метод print.Date
по умолчанию, хотя он работает только с прямыми переменными в консоли, а не со встроенными переменными.например, data.frame
:
x <- data.frame(dt = Sys.Date(), dttm = Sys.time())
x$dt
# [1] "2019-01-25"
class(x$dt)
# [1] "Date"
print.Date <- function (x, max = NULL, ...) {
fmt <- getOption("date.format", "%m/%d/%Y")
if (is.null(max))
max <- getOption("max.print", 9999L)
if (max < length(x)) {
print(format(x[seq_len(max)], format=fmt), max = max, ...)
cat(" [ reached getOption(\"max.print\") -- omitted",
length(x) - max, "entries ]\n")
}
else if (length(x))
print(format(x, format=fmt), max = max, ...)
else cat(class(x)[1L], "of length 0\n")
invisible(x)
}
x
# dt dttm
# 1 2019-01-25 2019-01-25 00:22:38
x$dt
# [1] "01/25/2019"
class(x$dt)
# [1] "Date"
options(date.format="%b %d, %Y")
x$dt
# [1] "Jan 25, 2019"
Я определил здесь значение по умолчанию "%m/%d/%Y"
, но это отвечает вашим предпочтениям.Более общее применение этой функции может по умолчанию использовать R-default "%Y-%m-%d"
, и пользователь может изменить его в какой-то момент в зависимости от своих потребностей.
(я не знаю, как получитьна эту функцию ссылаются для представлений data.frame
. Вероятно, это связано с областью видимости, где она использует base::print.Date
из-за пути поиска в пространствах имен. Если вы спросите "могу ли я заменить это" , этоспросили, и, как правило, ответ такой: «это может сработать, но ...» или «caveat emptor» , и, по моему опыту, никогда не было полностью решено, особенно когдапытается перебрать базовые функции.)