Mapply переработка в R - PullRequest
       7

Mapply переработка в R

1 голос
/ 15 апреля 2019

Я написал функцию, которая выполняет моделирование аримы, выводит таблицу коэффициентов и p-значений, ранжирует p-значения и возвращает модель аримы без значимых переменных.

Функция принимает два входа, объекты временного ряда и фрейм данных.

Вот код:

  backward_stepwise<-function(x, y){
    repeat{
       arima_result<-auto_arima(x)
       arima_pvals<-p_calc(arima_result)
       arima_outputs<-run_outputs(arima_result, arima_pvals)
       arima_ranked<-rank_pval(arima_outputs)
       # temporary fix to .xreg being added to term names
       for(i in 1:length(arima_ranked$term)){
       arima_ranked$term<-gsub(arima_ranked$term, pattern = 'xreg.', 
       replacement = "")
     }
       remove_num_one<-remove_one(arima_ranked)
        # removed the cond_select function so that y and x write over 
        themselves
        y<-subset(y, select = colnames(y) != remove_num_one) 
        x<-as.ts(y)

    if(min(arima_ranked$rank, na.rm = TRUE) != 1){
    break

    }
  }

  return(arima_result)
 }

Я собираюсь применить это к списку объектов временных рядов и списку фреймов данных

Пример списка временных рядов

CAN_V98
ADE_U91
ADE_V95

Пример фрейма данных

CAN_V98
ADE_U91
ADE_V95

Когда я применяю это view mapply или for loop, оба метода получают значения из одного и того же индекса. Т.е. переменные пошаговой функции будут удалены из CAN_V98 и продолжат использовать CAN_V98 из списка фреймов данных, или после выполнения первого цикла он будет использовать второй фрейм данных из списка фреймов данных.

# Application via for loop
for(i in mkt_grd){
x<-list_ts_actual[[i]]
y<-list_df_actual[[i]]
ts_outputs[[i]]<-backward_stepwise(x, y) 
}

# Application via mapply
ts_outputs1<-mcmapply(backward_stepwise, list_ts_actual, 
list_df_actual,SIMPLIFY = FALSE)

Спасибо за любую помощь

1 Ответ

0 голосов
/ 15 апреля 2019

mapply не работает как встроенный цикл for, т.е. он не будет проходить через каждый j для каждого, так сказать, i.

mapply(function(x, y){cat("x = ", x, " y = ", y, "\n")},
       x = 1:5, y = 1:5)

x =  1  y =  1 
x =  2  y =  2 
x =  3  y =  3 
x =  4  y =  4 
x =  5  y =  5

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

mapply(function(x, y){cat("x = ", x, " y = ", y, "\n")},
       x = 1:5, y = 1:3)

x =  1  y =  1 
x =  2  y =  2 
x =  3  y =  3 
x =  4  y =  1 
x =  5  y =  2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...