当前位置:  开发笔记 > 编程语言 > 正文

在日期向量上使用sapply

如何解决《在日期向量上使用sapply》经验,为你挑选了1个好方法。

我有一个向日期添加随机整数的函数:

rand_to_date = function(date){
newdate = as.Date(date) + sample(1:30, 1)
return(as.Date(newdate))
}

效果很好。但是,如果我尝试使用sapply将此功能应用于日期向量,例如

test_dates = c('2001-01-01', '2002-02-02', '2003-03-03', '2004-04-04')

sapply将不会以日期格式返回输出向量:

 sapply(test_dates,rand_to_date)
 2001-01-01 2002-02-02 2003-03-03 2004-04-04 
 11329      11748      12115      12513

相反,lapply将返回日期列表。但是,再次将unlist应用于此输出将为我提供数字而不是日期的向量。也没有

sapply(sapply(test,rand_to_date), as.Date)

工作。我将这些随机日期的向量作为输出的最简单方法是什么?



1> G. Grothendi..:

1)由于该c.Date方法的存在,请使用lapply,然后使用c。我们还简化rand_to_date并添加set.seed了可重复性:

rand_to_date <- function(date) as.Date(date) + sample(30, 1)

set.seed(123)
test_dates <- c('2001-01-01', '2002-02-02', '2003-03-03', '2004-04-04')

do.call("c", lapply(test_dates, rand_to_date))
## [1] "2001-01-10" "2002-02-26" "2003-03-16" "2004-05-01"

2)或者,我们可以像这样立即使rand_to_date向量化:

rand_to_date <- function(date) as.Date(date) + sample(30, length(date), TRUE)

set.seed(123)
test_dates <- c('2001-01-01', '2002-02-02', '2003-03-03', '2004-04-04')
rand_to_date(test_dates)
## [1] "2001-01-10" "2002-02-26" "2003-03-16" "2004-05-01"

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有