我有一个数据框加载到R中,具有不同的值:
Group Value
A 50
A 2
A 55
B 41
B 60
B 102
C 24
C 60
C 2
D 6
D 9
D 20
E 1
E 23
E 19
我正在使用拆分功能按组拆分数据:
mylist <- split(mydata, mydata$Group)
mylist
然后我创建一个auto.arima函数,当我在一个单独的组上运行它时,该函数会返回ARIMA输出(该组已经作为一个单独的数据帧加载到R中):
arm <- function(x) auto.arima(x)
forecastarm=arm(myTableA$Value)
但是,我想要做的是使用ARIMA函数自动计算数据集中所有组的ARIMA。但是,我不确定如何使用lapply来做到这一点。
我试过了:
allarima <- lapply(mylist,arm)
但是,它似乎没有像我想的那样在组中单独运行ARIMA模型,因为我收到错误消息:
Error in auto.arima(x) : No suitable ARIMA model found
非常感谢有关如何正确使用lapply功能的任何帮助。非常感谢。
答案 0 :(得分:1)
我设法解决了这个问题。
我试图在整个数据框上运行该函数,当我应该隔离Value列并在其上运行它时。
mylist <- split(mydata, mydata$Group)
mylist
arm <- function(x) plot(forecast(auto.arima(x$Value),h))
allarima <- lapply(mylist,arm)
你可以看到,在函数中,我指定了auto.arima(x $ Value),而不是简单的 x ,它代表了整个数据框。
此外,我不是简单地获取ARIMA输出,而是希望使用预定义的预测期 h 直接获得预测和绘图,所以称为绘图和预测函数。
希望以上信息丰富,非常感谢user20650指出我正确的方向。
答案 1 :(得分:0)
您可以使用地图功能:
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete{
let collection = monthlyExpenses[indexPath.row]
CoreDataHelper.deleteExpense(expense: collection)
monthlyExpenses.remove(at: indexPath.row )
monthlyExpenses = CoreDataHelper.retrieveExpenses()
}
}
顺便说一句......这是加勒特和哈德利的“数据科学研究”中的一个典型例子
答案 2 :(得分:0)
通常,split
后跟lapply
可以替换为by
(面向对象的tapply
包装器),它可以按因子对数据帧进行切片,将子集传递给已定义或匿名的函数以进行进一步处理。
arm <- function(x) auto.arima(x$Value)
aroma_list <- by(mydata, mydata$Group, FUN = arm)