【问题标题】:Condition has length greater than 1 in while loop条件在 while 循环中的长度大于 1
【发布时间】:2017-03-08 14:12:16
【问题描述】:

我正在编写一个函数,以便在给定月份和年份的情况下返回该月的最后一个工作日。

它使用来自 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.yearmon 提供的月份的最后一天开始,格式为“mmYYYY”并测试 bizday。一次减去一天,直到 is.bizday 返回 TRUE,因此条件 !is.bizday 变为 FALSE 并中断。 (应该)

我得到“条件在 while 循环中的长度大于 1”,但不知道问题出在哪里。

提前致谢

【问题讨论】:

  • 你已经用谷歌搜索过那个错误了吗?
  • 您的意见是什么?请提供mesanio 的最小示例。
  • 我无法重现您的错误。该功能对我来说很好。您输入的是日期向量吗?
  • d

标签: r zoo


【解决方案1】:

我认为您正在尝试将函数与日期向量一起使用,但是无法在 while 循环中使用多个值来评估逻辑运算符。我建议你改用sapply()

date <- "122001"
dates <- c("122001", "091999")

UltDiaLabor(date) # works
UltDiaLabor(dates) # does not work
sapply(dates, UltDiaLabor) # works

【讨论】:

  • 我知道这不应该与矢量一起使用,应该使用 sapply。但即使将它与日期一起使用,while 循环也会给我主题中所述的错误。
  • 不知道如何测试。 str(!is.bizday(ult)) 结果是:logi FALSE。如何测试它是否是矢量?
  • 嗯,终于找到问题了。该函数工作正常,但 ult 已矢量化,因此 is.bizday 返回一个矢量。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 2015-02-27
  • 2018-08-19
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
相关资源
最近更新 更多