/ / आर - आर, लापरवाही, sapply, mapply में एकाधिक सूची में समारोह लागू

आर-आर में कई सूची में फ़ंक्शन लागू करना, लापरवाही से, मैप्ली, मैप्ली

मेरे पास एक ऐसा कार्य है जिसे मैं बुलाऊंगा computeMASE 3 अलग-अलग सूचियों पर लागू करने के लिए forecast.list,train.list,test.list उनमें से सभी के पास सामान्य मूल्य हैं (ap,wi)। मैं नीचे दिए गए कोड में दिखाए गए अनुसार सूची में व्यक्तिगत रूप से फ़ंक्शन का उपयोग कर सकता हूं, लेकिन जब मैं इसका उपयोग करता हूं lapply और एक ही समय में डेटा प्राप्त करने के लिए फ़ंक्शन को लागू करें, मैं ऐसा करने में असमर्थ हूं। कृपया पुन: उत्पन्न उदाहरण के लिए नीचे देखें। कृपया मुझे यह हल करने के बारे में बताएं।

बहुत धन्यवाद

library("forecast")

## Forecast Function

for.x <- function(x){
fc <- forecast(ets(x),h=18)$mean
return(fc)
}

## MASE Function

computeMASE <- function(forecast,train,test,period){

# forecast - forecasted values
# train - data used for forecasting .. used to find scaling factor
# test - actual data used for finding MASE.. same length as forecast
# period - in case of seasonal data.. if not, use 1

forecast <- as.vector(forecast)
train <- as.vector(train)
test <- as.vector(test)

n <- length(train)
scalingFactor <- sum(abs(train[(period+1):n] - train[1:(n-period)])) / (n-period)

et <- abs(test-forecast)
qt <- et/scalingFactor
meanMASE <- mean(qt)
return(meanMASE)
}


## Prepare Data

train.list <- list(ap = ts(AirPassengers[1:(length(AirPassengers)-18)],start=start(AirPassengers),frequency=12),
wi = ts(wineind[1:(length(wineind)-18)],end=end(wineind),frequency=12))

test.list <- list(ap = ts(AirPassengers[(length(AirPassengers)-17):length(AirPassengers)],end=end(AirPassengers),frequency=12),
wi = ts(wineind[(length(wineind)-17):length(wineind)],end=end(wineind),frequency=12))

## Create Forecast

forecast.list <- lapply(train.list,for.x)

## Compute MASE for each list in the forecast

k.ap <- computeMASE(forecast.list$ap,train.list$ap,test.list$ap,12)
k.wi <- computeMASE(forecast.list$wi,train.list$wi,test.list$wi,12)


## How to apply compute MASE to all the elements in the list,? below does not work

mapply(computeMASE(X,Y,Z,12),X=forecast.list,Y=train.list,Z=test.list)

उत्तर:

उत्तर № 1 के लिए 1

का पहला तर्क mapply एक समारोह होना चाहिए। आप अवधि तर्क "करी" कर सकते हैं

mapply(function(x,y,z) computeMASE(x,y,z,12), forecast.list, train.list, test.list)

या, इसे एक और तर्क के रूप में प्रदान करें (अंतर्निहित रीसाइक्लिंग के साथ)

mapply(computeMASE, forecast.list, train.list, test.list, 12)