用于检查日期字符串是否在日期范围内的 Spotfire TERR 脚本

Spotfire TERR script to check if date string is within date range

startDate="04/01/2015"
endDate="07/01/2015"
dateString="04/30/2015 03/21/2015 06/28/2015 12/19/2015"

我想要一个计算列,如果 dateString 中的所有日期都在 startDate 和 endDate 之间,则 return 为 "Yes",否则为 "No"。

请注意:dateString 可以包含任意数量的日期。

我尝试编写一个 TERR 脚本(return 类型字符串):

MyCustomFunction <- function(startDate, endDate, dateString) {
    v1 <- scan(text=dateString, what='', quiet=TRUE)
    v2 <- as.Date(v1, '%m/%d/%Y')
    temp <- v2 >= as.Date(startDate, '%m/%d/%Y') & v2 <= as.Date(endDate,'%m/%d/%Y')
    ifelse(length(unique(temp))==1, ifelse(unique(temp)==TRUE, test<-as.character(TRUE), test<-as.character(FALSE)), test<-as.character(FALSE))
    test
}
output <- MyCustomFunction(startDate = input1, endDate = input2, dateString = input3)

但这会显示一个空列。 有人可以帮我吗?或者提供替代解决方案?我使用 Spotfire 版本 6.5

提前致谢。

我稍微调整了你的代码。 Spotfire 将输入设置为矢量。根据需要调整输入和输出。我使用 strsplit 是因为我假设数据看起来像这样。

此外,您的 ifelse 语句中也不需要赋值。您只需将结果分配给您的变量。我在 Spotfire 6.5 中测试了这段代码,得到了正确的结果。

startDate <- "01/01/2015"
endDate <- "07/01/2015"

MyCustomFunction <- function(startDate, endDate, dateString) {
      outcome <- NULL
      for (i in 1:length(dateString)) {
      v1 <- strsplit(dateString[i], " ", fixed = TRUE)
      v2 <- as.Date(unlist(v1), '%m/%d/%Y')
      temp <- v2 >= as.Date(startDate, '%m/%d/%Y') & v2 <= as.Date(endDate,'%m/%d/%Y')
      outcome <- c(test, ifelse(length(unique(temp))==1, ifelse(unique(temp)==TRUE, as.character(TRUE), as.character(FALSE)), as.character(FALSE)))
      }
      return(outcome)
}

output <- MyCustomFunction(startDate, endDate, dateString)