我编写了以下函数将字符串向量转换为日期向量(for循环中的代码受到这篇文章的启发:R help converting factor to date)。当我传入大小为1000的向量时,大约需要30秒。不是非常慢,但我最终需要传递大约100,000,所以这可能是一个问题。任何想法为什么这么慢和/或如何加快它?
toDate <- function (dates)
{
theDates <- vector()
for(i in 1:length(dates))
{
temp <- factor(dates[i])
temp <- as.Date(temp, format = "%m/%d/%Y")
theDates[i] <- temp
}
class(theDates) <- "Date"
return(theDates)
}
答案 0 :(得分:3)
只是做:
as.Date(dates, format = "%m/%d/%Y")
dates
向量,因为as.Date()
可以在单次拍摄中处理一个字符向量。您的函数会对length(dates)
进行as.Date()
次调用以及对其他函数进行一些分配,这些函数的开销都是完全没必要的。as.Date()
只会将它们转换回字符)。如果您确实希望转换它们,factor()
也矢量化,那么您可以(但您根本不需要此,功能中的任何位置)移除factor()
行并在dates <- as.factor(dates)
循环外插入for()
。但同样,根本不需要这样做!