如何在R语言中通过循环为时间序列计算对数?含ts对象循环创建需求
解决方案
1. 循环创建时间序列(ts)对象
你之前逐个定义ts对象的代码可以用循环简化,核心是通过变量名字符向量批量处理:
# 先定义要处理的列名 m_cols <- paste0("M", 1:4) # 循环生成ts对象 for(col in m_cols) { # 从db中取对应列转成ts,再赋值到全局环境 assign(col, ts(db[[col]], start = c(1995, 12), frequency = 12)) }
2. 循环计算对数序列
你之前的代码出错是因为AM <- list(M1, M2, M3, M4)存的是ts对象本身,不是变量名,导致paste0("log_", x)会把对象内容拼进去,生成错误的变量名。同样用变量名字符向量就能解决:
# 基于前面的列名循环计算对数 for(col in m_cols) { # 取出对应ts对象计算对数,然后赋值为带log_前缀的变量 assign(paste0("log_", col), log(get(col))) }
更整洁的替代方案:用列表统一管理变量
如果不想让全局环境堆满零散变量,推荐用列表存储所有ts和对数结果,后续操作更方便:
# 批量创建ts对象并存入列表 ts_list <- lapply(m_cols, function(col) { ts(db[[col]], start = c(1995, 12), frequency = 12) }) names(ts_list) <- m_cols # 批量计算对数,存入新列表 log_ts_list <- lapply(ts_list, log) names(log_ts_list) <- paste0("log_", m_cols) # 要是需要把列表里的变量导出到全局环境,用这行: list2env(c(ts_list, log_ts_list), envir = .GlobalEnv)
内容的提问来源于stack exchange,提问作者Diego
相关产品推荐
相关产品推荐

