gpt4 book ai didi

r - 用于生成预测的 Plyr

转载 作者:行者123 更新时间:2023-12-01 12:47:57 24 4
gpt4 key购买 nike

作为学习 plyr 的练习,我尝试对 Rob Hyndman 最近发布的一篇文章做一个 plyr 版本:

library(forecast); library(plyr)
# Hyndman, R. J. (2013, Jan 7). Batch forecasting in R
# Retrieved Jan 8, 2013, from Research Tips: http://robjhyndman.com/researchtips/batch-forecasting/

retail <- read.csv("http://robjhyndman.com/data/ausretail.csv",header=FALSE)
retail <- ts(retail[,-1],f=12,s=1982+3/12)

ns <- ncol(retail)
h <- 24
fcast <- matrix(NA,nrow=h,ncol=ns)
for(i in 1:ns)
fcast[,i] <- forecast(retail[,i],h=h)$mean

write(t(fcast),file="retailfcasts.csv",sep=",",ncol=ncol(fcast))

但是,我一直在挣扎。这是我的尝试:

n.cols <- ncol(retail)
h <- 24
series.names <- names(retail[,2:n.cols])

fcast.func <- function(retail) {
retail.ts <- ts(retail,f=12,s=1982+3/12)
fcast.func <- forecast(retail.ts,h=h)$mean
}

ddply.fcast <- ddply(.data=retail[,2:n.cols], .variables=series.names, .fun=colwise(fcast.func))

不返回任何值。有人可以帮我解决我对 plyr 的误解吗?

最佳答案

问题是您使用了 ddply(,其中第一个 d = datatype of input = data.frame 和第二个 d = datatype of output = data.frame(再次)。但是,您提供的输入 retail[, 2:ncols] 不是 data.frame

class(retail)
[1] "mts" "ts"

相反,您可以做的是 ldply,它将 list 作为输入,运行您的函数并尝试输出 data.frame .您可以通过这种方式完成。

require(forecast)
require(plyr)

retail <- read.csv("http://robjhyndman.com/data/ausretail.csv",header=FALSE)
retail <- ts(retail[,-1],f=12,s=1982+3/12)

ns <- ncol(retail)
h <- 24
plyr.fcast <- t(ldply(1:ns, function(idx) {
c(forecast(retail[, idx], h = h)$mean)
}))

这需要相当多的时间。如果你想并行运行(假设你在一个有很多核心的集群/机器上运行),那么你可以安装包 doMC 然后按如下方式使用它:

require(doMC)
registerDoMC(20) # BEWARE: use it if you have 20 processors available!!
plyr.fcast <- t(ldply(1:ns, function(idx) {
c(forecast(retail[, idx], h = h)$mean)
}, .parallel = TRUE))

转置给出的结果等于 fcast 并且还将 plyrdata.frame 输出类型转换为 矩阵。因此,您可以使用相同的 write 语法写入文件。

希望这对您有所帮助。

关于r - 用于生成预测的 Plyr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14257500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com