简体   繁体   中英

Apply a function to objects in my global environment R

This code chunk creates a 10 objects based of length of alpha.

alpha <- seq(.1,1,by=.1)

for (i in 1:length(alpha)){
  assign(paste0("list_ts_ses_tune", i),NULL)

}

How do I put each function into the new list_ts_ses_tune1 ... null objects I've created? Each function puts in a list, and works if I set list_ts_ses_tune1 <- lapply ...

for (i in 1:length(alpha))
  {
  list_ts_ses_tune[i] <- lapply(list_ts, function(x) 
forecast::forecast(ses(x,h=24,alpha=alpha[i]))) 
  list_ts_ses_tune[i] <- lapply(list_ts_ses_tune[i], "[",  c("mean"))
}

Maybe this is a better way to do this? I need each individual output in a list of values.

Edit:

for (i in 1:length(alpha))
 {
 list_ts_ses_tune[[i]] <- lapply(list_ts[1:(length(list_ts)/2)], 
function(x) 
forecast::forecast(ses(x,h=24,alpha=alpha[i]))) 
 list_ts_ses_tune[[i]] <- lapply(list_ts_ses_tune[[i]], "[",  c("mean"))

}

We can use mget to return all the objects into a list

mget(ls(pattern = '^list_ts_ses_tune\\d+'))

Also, the NULL list can be created more easily instead of 10 objects in the global environment

list_ts_ses_tune <- vector('list', length(alpha))

Now, we can just use the OP's code

for (i in 1:length(alpha))
  {
  list_ts_ses_tune[[i]] <- lapply(list_ts, function(x) 
forecast::forecast(ses(x,h=24,alpha=alpha[i]))) 
  
}

If we want to create a single data.frame

for(i in seq_along(alpha)) {
    list_ts_ses_tune[[i]] <- data.frame(Mean = do.call(rbind, lapply(list_ts, function(x)
           forecast::forecast(ses(x,h=24,alpha=alpha[i]))$mean)))
}

You could simply accomplish everything by doing:

library(forecast)
list_ts_ses_tune <- Map(function(x) 
                       lapply(alpha, function(y)forecast(ses(x,h=24,alpha=y))['mean']), list_ts) 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM