Формат вывода даты из mapply не подходит

У меня есть функция, которая выполняет некоторую проверку состояния и выводит объект "Дата". Класс "s" это "Дата". Но вывод "mapply" представляет собой числовой вектор. Я хочу, чтобы вывод "dataF1$RECENCY" также был объектом Date. Нужна помощь в этом

dataF1 = read.csv("C:\\Users\\DATA.csv", header = TRUE, sep = ",")
dataF1$DT = as.Date(dataF1$DT, format = "%d-%b-%y")

myFunction <- function(x, y, z){
    if (x == "U"){
        s = z + 60
    }
    else {
        if (y == "ANNUAL"){
            s = z + 30
        }
        else {
            s = z + 15
        }
    }
    print (s)
    print (class(s))
    return(s)
}

dataF1$RECENCY = mapply(myFunction, x = dataF1$TYPE, y = dataF1$PAYMENT, z = dataF1$DT)

> head(dataF1$RECENCY)
[1] 13966 14340 14467 13752 13721 13752

1 ответ

Решение

Не позволяйте mapply упростить ваш результат.

> mapply(function(x) {as.Date(x, format = "%m.%d.%Y")}, x = "1.5.2014", SIMPLIFY = FALSE)
$`1.5.2014`
[1] "2014-01-05"

> mapply(function(x) {as.Date(x, format = "%m.%d.%Y")}, x = "1.5.2014", SIMPLIFY = TRUE)
1.5.2014 
   16075

Вы можете создать свой собственный вектор, используя do.call,

out <- mapply(function(x) {as.Date(x, format = "%m.%d.%Y")}, x = c("1.5.2014", "2.5.2014"), SIMPLIFY = FALSE)
do.call("c", out)
    1.5.2014     2.5.2014 
"2014-01-05" "2014-02-05"
Другие вопросы по тегам