警告消息:通过将日期转换为数值

时间:2018-09-24 14:32:44

标签: r

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,它还不错!任何偏心的东西都是愚蠢的!

1 个答案:

答案 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函数以进行正确的矢量化计算,从长远来看,我建议这样做。