Ответ 1
Здесь есть две проблемы. Один из них: вводится ли вход от Date
до numeric
. Другим является то, будет ли результат принуждаться к numeric
.
Ввод
Для циклов вставляем Date
входы в numeric
, потому что, как указывают @DWin и @JoshuaUlrich, петли for
принимают vectors
, а Date
технически не являются векторами.
> for(d in dates) print(class(d))
[1] "numeric"
[1] "numeric"
С другой стороны, lapply
и его потомство для упрощения sapply
не имеют таких ограничений.
> sapply( dates, function(day) class(day) )
[1] "Date" "Date"
Выход
Однако! Вывод class()
выше - символ. Если вы попытаетесь фактически вернуть объект даты, sapply
- это не то, что вы хотите.
lapply
не принуждает к вектору, но sapply
делает:
> lapply( dates, identity )
[[1]]
[1] "2013-01-01"
[[2]]
[1] "2013-01-02"
> sapply( dates, identity )
[1] 15706 15707
Это потому, что функция упрощения sapply
принудительно выводит на вектор.
Резюме
Итак: если у вас есть объект Date
и вы хотите вернуть объект Date
, вы можете использовать lapply
или sapply
. Если у вас есть объект Date
и вы хотите вернуть объект Date
, вы можете использовать цикл for
или lapply
. Если у вас есть объект Date
и вы хотите вернуть объект Date
, используйте lapply
.
Ресурсы для обучения больше
Если вы хотите углубиться в векторы, вы можете начать с заметки Джона Кука, продолжить с R Inferno и продолжите с SDA.