R语言如何向全局环境中已创建的list_ts_ses_tune系列对象赋值函数结果
最推荐的实现方案是放弃创建list_ts_ses_tune1~list_ts_ses_tune10这类独立变量,改用嵌套列表统一存储所有参数对应的结果,无需提前预分配空对象,用R原生的嵌套lapply即可完成所有计算,代码更简洁易维护:
library(forecast) alpha <- seq(.1, 1, by = .1) # 提前定义需要处理的时间序列子集,避免循环内重复计算 ts_subset <- list_ts[1:(length(list_ts)/2)] # 嵌套lapply直接生成结果列表,对应索引i的元素就是alpha[i]对应的所有预测均值列表 list_ts_ses_tune <- lapply(alpha, function(current_alpha) { lapply(ts_subset, function(ts) { forecast(ses(ts, h = 24, alpha = current_alpha))[["mean"]] }) })
这个方案的优势:
- 避免了循环内的索引错误,你之前批量赋值报错的核心原因是你预创建的是带数字后缀的独立变量,而非名为
list_ts_ses_tune的列表对象,直接对list_ts_ses_tune[i]赋值自然会出错 - 无需提前做预分配操作,所有计算逻辑封装在apply语句内,代码可读性更高
- 所有结果统一存储在同一个列表中,后续做跨alpha参数的对比、批量导出都更方便,不需要拼接变量名调用对象
如果确实有强需求要单独生成带数字后缀的独立对象,可以在生成上述列表后再加一步赋值操作(非常不推荐,会污染全局环境):
for (i in seq_along(alpha)) { assign(paste0("list_ts_ses_tune", i), list_ts_ses_tune[[i]]) }
内容的提问来源于stack exchange,提问作者chriswang123456
相关产品推荐
相关产品推荐

