Предупреждающее сообщение: путем преобразования дат в числовые значения - PullRequest
0 голосов
/ 24 сентября 2018
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

Может кто-нибудь объяснить мне, почему я получаю это сообщение об ошибке?Я использовал тот же Кодекс в январе прошлого года, и он проснулся прекрасно!Любой хепел безошибочно уточняется!

1 Ответ

0 голосов
/ 24 сентября 2018

Как уже упоминалось @Sotos, причина, по которой вы получаете это предупреждающее сообщение, заключается в том, что в вашей функции вы используете оператор if, но объект t, вероятно, является вектором дат.Поскольку if не является векторизованным, ваша функция будет проверять только, отсутствует ли первый элемент tif (is.na(t))), и выдает вам это точное предупреждение.Обратите внимание, что ваш код по-прежнему будет работать, однако он, вероятно, не вернет то, что вы ожидаете.

Самый простой способ исправить это без редактирования вашей функции - использовать sapply().Вы можете сделать что-то вроде этого:

t <- time(d)
t2 <- sapply(t, FUN = date_to_numeric)

Вы также можете отредактировать вашу функцию date_to_numeric, чтобы учесть правильные векторизованные вычисления, которые я бы порекомендовал в долгосрочной перспективе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...