Возврат вектора класса POSIXct с помощью vapply

У меня есть список дат с классом POSIXct следующим образом (минимальный рабочий пример):

L <- list(as.POSIXct("2012-12-12 12:12:12"), as.POSIXct("2012-12-12 12:12:12"))

Мне нужно получить из него вектор класса POSIXct. Это исключает глупость и оставляет меня с нежностью и безвкусицей. Я применяю их следующим образом:

sapply(L, "[[", 1)

и это возвращает:

[1] 1355310732 1355310732

Преобразование этого вектора в POSIXct приводит к ошибке, поскольку необходимо указать источник. Я также пробовал vapply:

vapply(L, "[[", as.POSIXct(Sys.time()), 1)

но также получить числовой вектор:

[1] 1355310732 1355310732

Также unlist не создает желаемый вектор POSIXct:

> unlist(L)
[1] 1355310732 1355310732 

Короче говоря, как мне извлечь список значений POSIXct в вектор POSIXct?


person Dmitrii I.    schedule 13.12.2012    source источник


Ответы (1)


А как насчет do.call?

L <- list(as.POSIXct("2012-12-12 12:12:12"), as.POSIXct("2012-12-12 12:12:12"))
do.call(c, L) # Execute function c on a list L of arguments.
[1] "2012-12-12 12:12:12 CET" "2012-12-12 12:12:12 CET"
person plannapus    schedule 13.12.2012
comment
Действительно, как сказано в руководстве по функции c: Все аргументы приведены к общему типу.... Спасибо. - person Dmitrii I.; 13.12.2012
comment
Это может изменить часовой пояс, если в исходном списке был атрибут tz.L <- list(as.POSIXct("2012-12-12 12:12:12", tz = "UTC"), as.POSIXct("2012-12-12 12:12:12", tz = "GMT")), который легко исправить, если все значения tz одинаковы, например. by .POSIXct(do.call(c, L), tz = "UTC") а как можно сохранить часовые пояса если они разные? - person sparrow; 23.12.2014
comment
@divibisan «c сохраняет атрибуты (например, class)» — нет, он делает прямо противоположное, он отбрасывает их (и это явно задокументировано). Но POSIXct предоставляет свой собственный c способ обойти это. Поэтому я отменил ваше редактирование. - person Konrad Rudolph; 22.03.2019
comment
@KonradRudolph А, я вижу. Спасибо, я очень рад, что вы уловили это! - person divibisan; 22.03.2019
comment
@divibisan Кроме того, я прошу прощения за мой деспотичный откат. То, что вы добавили, имело ценность, кроме ошибки. Однако вместо этого я бы предложил добавить ваш собственный ответ. - person Konrad Rudolph; 22.03.2019
comment
@KonradRudolph Не беспокойся об этом! Тот факт, что ошибки удаляются, мне нравится в SO. Я подумал о том, чтобы ответить, но у меня нет другого подхода, чтобы предложить, просто немного дополнительной информации о решении do.call(c, L). Это кажется мне более достойным редактирования, чем нового вопроса, хотя я был бы рад услышать иное от кого-то с большим опытом здесь. - person divibisan; 22.03.2019