vapply() vs. sapply()
No último exemplo, sapply() não conseguiu simplificar porque o elemento date de market_crash2 tinha duas classes (POSIXct e POSIXt). Perceba, porém, que nenhum erro foi lançado! Se uma função que você tivesse escrito esperasse que sapply() retornasse um vetor simplificado, isso seria confuso.
Para lidar com isso, existe uma função apply mais rígida chamada vapply(), que contém um argumento extra, FUN.VALUE, no qual você pode especificar o tipo e o comprimento da saída que deve ser retornada sempre que sua função aplicada for chamada.
Se você esperava que o valor de retorno de class() fosse um vetor de caracteres de comprimento 1, pode especificar isso usando vapply():
vapply(market_crash, class, FUN.VALUE = character(1))
dow_jones_drop date
"numeric" "Date"
Outros exemplos de FUN.VALUE podem ser numeric(2) ou logical(1). market_crash2 já está definido para você.
Este exercício faz parte do curso
R Intermediário para Finanças
Instruções do exercício
- Use
sapply()novamente para descobrir aclass()dos elementos demarket_crash2. Perceba como ele retorna uma lista e não um erro. - Use
vapply()emmarket_crash2para descobrir aclass(). EspecifiqueFUN.VALUE = character(1). Isso deve falhar de forma adequada.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
# Market crash with as.POSIXct()
market_crash2 <- list(dow_jones_drop = 777.68,
date = as.POSIXct("2008-09-28"))
# Find the classes with sapply()
___
# Find the classes with vapply()
___