while 循环中条件的长度大于 1
Condition has length greater than 1 in while loop
我正在编写一个函数,因此它 returns 给定月份和年份的月份的最后一个工作日。
它使用 bizdays 包中的 is.bizday。 is.bizday returns 如果给定日期是工作日,则为 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.yearmon 提供的月份的最后一天开始,格式为 "mmYYYY" 并测试 bizday。一次减去一天,直到 is.bizday returns TRUE 所以条件 !is.bizday 变为 FALSE 并中断。 (应该)
我得到 "Condition has length greater than 1 in while loop" 但不知道问题出在哪里。
提前致谢
我认为您正在尝试将函数与日期向量一起使用,但无法在 while 循环中使用多个值计算逻辑运算符。我建议您改为使用 sapply()
.
date <- "122001"
dates <- c("122001", "091999")
UltDiaLabor(date) # works
UltDiaLabor(dates) # does not work
sapply(dates, UltDiaLabor) # works
我正在编写一个函数,因此它 returns 给定月份和年份的月份的最后一个工作日。
它使用 bizdays 包中的 is.bizday。 is.bizday returns 如果给定日期是工作日,则为 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.yearmon 提供的月份的最后一天开始,格式为 "mmYYYY" 并测试 bizday。一次减去一天,直到 is.bizday returns TRUE 所以条件 !is.bizday 变为 FALSE 并中断。 (应该)
我得到 "Condition has length greater than 1 in while loop" 但不知道问题出在哪里。
提前致谢
我认为您正在尝试将函数与日期向量一起使用,但无法在 while 循环中使用多个值计算逻辑运算符。我建议您改为使用 sapply()
.
date <- "122001"
dates <- c("122001", "091999")
UltDiaLabor(date) # works
UltDiaLabor(dates) # does not work
sapply(dates, UltDiaLabor) # works