使用lapply在R中的列表中应用函数?

时间:2017-12-24 12:32:34

标签: r function lapply

我有一个数据框加载到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功能的任何帮助。非常感谢。

3 个答案:

答案 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)