date_to_numeric<- function(x)#function for construction of date
{
strptime(x,format = "%Y-%m-%d")->t
if(is.na(t)==TRUE)
strptime(x,format = "%Y%m%d")->t
as.numeric(format(t, "%Y"))->t1
as.numeric(format(t, "%m"))->t2
as.numeric(format(t, "%d"))->t3
d<-c(0,0.08493150685,0.1616438356,0.2465753425,0.3287671233,0.4136986301,0.495890411,0.5808219178,0.6657534247,0.7479452055,0.8328767123,0.9150684932)
d[t2]->t2
t3<-t3/365
result<-t1+t2+t3
return(result)
}
time(d)->t
t<-date_to_numeric(t)
Warning message:
In if (is.na(t) == TRUE) t <- strptime(x, format = "%yyyy%mm%dd") :
the condition has length > 1 and only the first element will be used
能否请某人向我解释为什么我收到此错误消息?去年一月,我使用了相同的Code,它还不错!任何偏心的东西都是愚蠢的!
答案 0 :(得分:1)
如@Sotos所述,收到此警告消息的原因是因为在函数中您正在使用if
语句,但是对象t
可能是日期的向量。由于if
未向量化,因此您的函数将仅检查t
的第一个元素是否丢失(在if (is.na(t))
中),并向您发出此精确警告。请注意,您的代码仍将运行,但是它可能不会返回您期望的结果。
无需编辑功能即可解决此问题的最简单方法是使用sapply()
。您可以执行以下操作:
t <- time(d)
t2 <- sapply(t, FUN = date_to_numeric)
您还可以编辑date_to_numeric
函数以进行正确的矢量化计算,从长远来看,我建议这样做。