如何在R中用lapply实现按账户的乘法型时间序列分解?
解决方案
正确简洁的乘法型时间序列分解代码
直接在lapply中为decompose传递type参数即可,这是lapply传递额外参数的标准用法:
tss <- tapply(data$sales, data$account, ts, start = c(2021, 5), frequency = 4) dcs <- lapply(tss, decompose, type = "multiplicative")
错误写法分析
你尝试的
lapply(tss, decompose(type = "multiplicative"))无法运行,原因是lapply的第二个参数需要是函数对象,而非函数调用的结果。正确方式是将decompose作为函数传入,后续参数直接跟在后面,lapply会自动把tss中的每个时间序列作为第一个参数传给decompose,同时带上type参数。另一种方案
lapply(names(tss), function(x) {decompose(tss[, x], type = "additive")})的问题:tss是列表结构,不是矩阵或数据框,不能用tss[, x]的索引方式,应使用列表索引tss[[x]]- 即便修正索引,这种遍历名称的写法也不如直接遍历
tss元素简洁高效
结果验证
运行正确代码后,dcs会成为一个列表,每个元素对应一个账户的乘法型分解结果,包含trend(趋势)、seasonal(季节)、random(随机)等分量。
内容的提问来源于stack exchange,提问作者Amit Abhinav
相关产品推荐
相关产品推荐

