В основном, я пытаюсь сохранить вектор с именем dates
специального Date
, который приносит много результатов в моем анализе, например, Новый год 2016 и 4 июля 2015 года. Я хочу, чтобы у меня было возможность извлечь из него вместо индекса для надежности, например, dates["nyd"]
, чтобы получить Новый год и dates["ind"]
, чтобы получить 4 июля.
Я думал, что это будет просто:
dates <- as.Date(c(ind = "2015-07-04", nyd = "2016-01-01"))
Но as.Date
разделил имена:
dates
# [1] "2015-07-04" "2016-01-01"
Не похоже на то, что векторы Date
не могут быть названы (что было бы странно, учитывая, что они в основном специально интерпретируются integer
s):
setNames(dates, c("ind", "nyd"))
# ind nyd
# "2015-07-04" "2016-01-01"
И, к сожалению, нет способа объявить вектор Date
напрямую (насколько я знаю?), особенно, не зная лежащих в основе целочисленных значений дат.
Исследуя это, кажется, это стандартная практика для класса функций as*
:
as.integer(c(a = "123", b = "436"))
# [1] 123 436
as(c(a = 1, b = 2), "character")
# [1] "1" "2"
Есть ли причина, почему это так? Потеря имен не упоминается в ?as
или в любой другой странице справки, которую я видел.
В более общем плане, есть ли способ (используя что-то другое, чем as*
), чтобы гарантировать, что имена объекта не будут потеряны при преобразовании?
Конечно, один подход заключается в написании пользовательских функций типа as.Date.named
или создании пользовательского класса as.named
со связанными методами, но мне было бы удивительно, если бы не было что-то подобное уже на месте, так как кажется это должно быть довольно распространенной операцией.
В случае, если это имеет значение, я на 3.2.2.