R中的Mapply回收

问题描述 投票:1回答:1

我编写了一个函数,它进行了arima建模,输出系数和p值表,对p值进行排序并返回没有重要变量的arima模型。

该函数采用两个输入,时间序列对象和数据帧。

这是代码:

  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

当我应用它查看mapply或for循环时,是从同一索引获取值的方法。即,后向逐步功能从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)

谢谢你的帮助

r mapply
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.