我正在编写一个函数,因此它返回给定月份和年份的月份的最后一个工作日。
它使用来自bizdays包的is.bizday。如果给定日期是工作日,则is.bizday返回TRUE,否则返回FALSE。
我的功能:
library(bizdays)
UltDiaLabor <- function(mesanio) {
ult<-as.Date(as.yearmon(mesanio, "%m%Y"), frac = 1)
while(!is.bizday(ult)) {
ult=ult-1
}
return(ult)
}
从as.monarmon提供的月份的最后一天开始,格式为“mmYYYY”并测试bizday。保持一次减少一天,直到is.bizday返回TRUE所以条件!is.bizday变为FALSE并且中断。 (应该)
我得到“条件在while循环中长度大于1”并且不知道问题在哪里。
提前致谢
答案 0 :(得分:1)
我认为你正在尝试使用带有日期向量的函数,但是没有办法在while循环中使用多个值来评估逻辑运算符。我建议你改用sapply()
。
date <- "122001"
dates <- c("122001", "091999")
UltDiaLabor(date) # works
UltDiaLabor(dates) # does not work
sapply(dates, UltDiaLabor) # works