Позволяет WMA (из пакета TTR) возвращать исходное значение, когда меньше N точек

#r #plyr

#r #plyr

Вопрос:

При выполнении следующего:

 wavData = ddply(wavData, c("primary", "interference", "label"), transform, 
                value = WMA(value,3,wts=1:3))
  

В некоторых результирующих группировках, созданных ddply, нет 3 точек, поэтому я получаю следующую ошибку:

 Error in WMA(value, 3, wts = 1:3) : Invalid 'n'
  

Вопрос: Как я могу разрешить WMA возвращать ИСХОДНЫЕ значения, когда n<3, и не аварийно завершать работу?

Ответ №1:

Как насчет использования ifelse ?

 wavData = ddply(wavData, c("primary", "interference", "label"), transform, 
            value = ifelse(length(value) < 3, value, WMA(value,3,wts=1:3)))
  

Комментарии:

1. 1, но ifelse может быть медленным. Поскольку отдельные элементы результата не затрагиваются, простой блок if / else будет быстрее: value = if(length(value) < 3) value else WMA(value,3,wts=1:3)