You can use get
to get data from an environment and assign
to assign data to a symbol in an environment.
library(quantmod)
stockData <- new.env()
tickers <- c("AAPL","GOOG", "IBM", "MSFT", "INTC", "YHOO", "F", "GS", "UL")
getSymbols(tickers, src="yahoo", env=stockData)
for (tick in tickers) {
x <- get(tick, pos=stockData) # get data from stockData environment
x$ret <- diff(log(Ad(x))) # add a column with returns
assign(tick, x, pos=stockData) # assign back into stockData environment
assign(paste0(tick, "monthly"),
apply.monthly(x, sum, na.rm=TRUE),
pos=stockData) # calc monthly sum and assign in stockData environment
}
Or, your could use eapply to apply a function to every object in the environment The result will be a list that you can coerce back into an environment
stockData <- as.environment(eapply(stockData, function(x) {
x$ret <- diff(log(Ad(x)))
x
}))
Or you could create a list of only the returns, then loop over that to calculate the monthly sums
R <- eapply(stockData, function(x) diff(log(Ad(x))))
monthly <- lapply(R, apply.monthly, sum, na.rm=TRUE)
You can merge the results into a single object like this
do.call(merge, R)
do.call(merge, monthly)