首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于生成预测的Plyr

用于生成预测的Plyr
EN

Stack Overflow用户
提问于 2013-01-10 20:02:32
回答 1查看 412关注 0票数 3

作为学习plyr的练习,我尝试对Rob Hyndman最近的一篇帖子做一个plyr版本:

代码语言:javascript
复制
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))

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

代码语言:javascript
复制
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的误解?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-10 21:20:26

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

代码语言:javascript
复制
class(retail)
[1] "mts" "ts"

相反,你可以做的是ldply,它接受一个list作为输入,运行你的函数并尝试输出一个data.frame。你可以用这种方式来完成。

代码语言:javascript
复制
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包,然后按如下方式使用它:

代码语言:javascript
复制
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,并且还将data.frame输出从plyr类型转换为matrix。因此,您可以使用相同的write语法来写入文件。

希望这能有所帮助。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14257500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档