【问题标题】:Mapply recycling in RR中的地图回收
【发布时间】:2019-04-15 01:39:37
【问题描述】:

我编写了一个函数,它进行 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】:

    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
    

    【讨论】:

    • 我的列表长度相同,我只是想确保变量不会从列表中的下一个数据框中删除
    • 我认为在问题的底部,您使用for循环和mapply来做同样的事情,比较结果应该可以回答您的问题吗?
    • @Croote,我可以毫无疑问地检查一下,而且只是想看看我理解的 mapply 的应用是正确的。谢谢你的回复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多