我正在编写一个函数来查找当前日期的x个月的日期。我一直收到错误/警告。
DateBack <- function(CurrentYear, CurrentMonth, MonthsBack){
if(MonthsBack< 13){
if(MonthsBack>=CurrentMonth){
month<-12+CurrentMonth-MonthsBack
datet<-paste(CurrentYear-1,month, sep="-")
}
else{
month<-CurrentMonth-MonthsBack
datet<-paste(CurrentYear-1, month, sep="-")
}
}
else{
Years <- trunc(MonthsBack/12,0)
if((MonthsBack-12*Years)>=CurrentMonth){
month<-12+CurrentMonth-MonthsBack
}
else{
month<-CurrentMonth-MonthsBack
}
datet<-paste(CurrentYear-Years, month, sep="-")
}
return(datet)
}
CurrentYear<- c(2000, 2000, 2003, 2004)
CurrentMonth<-c(1, 2, 6, 12)
df<- data.frame(CurrentYear, CurrentMonth)
df$MonthsBack <- DateBack(df$CurrentYear,df$CurrentMonth,1)
警告讯息: 在if(MonthsBack&gt; = CurrentMonth){: 条件的长度> 1,只使用第一个元素
我该如何纠正此错误?
答案 0 :(得分:0)
我也是第二个CarlWitthoft评论,尽管通过日期函数似乎没有一个简单的答案。
代码中的问题是没有向量化的条件语句。您可以以完全向量化的方式实现它而不使用IF语句:
DateBack = function (Y,M, monthsBack) {
YM = (Y*12 + M - 1) - monthsBack
newY = YM %/% 12
newM = YM %% 12 + 1
return( paste( newY, newM, sep="-"))
}
DateBack( c(2000,2000,2003,2004),c(1,2,6,12),1)
[1] "1999-12" "2000-1" "2003-5" "2004-11"