Peter was on the right track. getSymbols() allows you to specify that you want the value returned as an object instead of load()ed by setting auto.assign = FALSE.
I've also made other changes to your function: - Use requireNamespace() so you don't alter the search() path - Use TTR::ROC() to calculate returns, instead of a loop - Use more meaningful names for the mean and standard deviation objects - Use isTRUE() to ensure 'norm' is 'TRUE' and not '1' or '"true"' or anything else that could be coerced to TRUE getReturns <- function(symbol, start = "2015-01-01", end = Sys.Date(), norm = FALSE) { stopifnot(requireNamespace("quantmod")) Data <- quantmod::getSymbols(symbol, src = "yahoo", from = start, to = end, auto.assign = FALSE) cat("length = ", NROW(Data), "\n") ret <- TTR::ROC(quantmod::Cl(Data), type = "discrete") mu <- mean(ret, na.rm = TRUE) sigma <- sd(ret, na.rm = TRUE) cat("stdDev = ", sigma, "\n") if (isTRUE(norm)) { ret <- (ret - mu) ret <- ret / sigma } return(ret) } x <- getReturns("IBM") length = 907 stdDev = 0.01245428 head(x) IBM.Close 2015-01-02 NA 2015-01-05 -0.015734932 2015-01-06 -0.021565971 2015-01-07 -0.006535554 2015-01-08 0.021734892 2015-01-09 0.004355530 On Thu, Aug 9, 2018 at 4:24 PM, rsherry8 <rsher...@comcast.net> wrote: > Peter, > > Thanks for the response. I tired the following command: > AVB[["AVB.Close"]] > and I got: > Error in AVB[["AVB.Close"]] : subscript out of bounds > Are you assuming that AVB is a data frame? I do not think AVB is a data > frame. Is there a way > for me to check? > Thanks, > Bob > > > On 8/9/2018 3:46 PM, Peter Langfelder wrote: >> >> If I understand it correctly, the function getSymbols creates a >> variable with the name being the stock symbol. Then use the function >> get(symbol) to retrieve the value of the variable whose name is >> contained in the character string `symbol'. Assign that to a variable >> (e.g. AVB). You may also have to modify the names of the components >> you retrieve from the list AVB. For that, you can use >> AVB[["AVB.Close"]] instead of AVB$AVB.Close. You can them use >> something like AVB[[paste0(symbol, ".Close"]] to generalize the >> retrieval of list components. >> >> HTH, >> >> Peter >> On Thu, Aug 9, 2018 at 12:40 PM rsherry8 <rsher...@comcast.net> wrote: >>> >>> >>> I wrote the following function: >>> >>> # This method gets historical stock data for the stock Avalon Bay whose >>> symbol is AVB. >>> getReturns <- function(norm = FALSE) >>> { >>> library(quantmod) >>> >>> getSymbols("AVB", src = "yahoo", from = start, to = end) >>> length = length( AVB$AVB.Close ) >>> close = as.numeric( AVB$AVB.Close ) >>> cat( "length = ", length(close ), "\n" ) >>> for( i in 1:length-1 ) >>> diff[i] = ((close[i+1] - close[i]) ) / close[i] >>> u = mean(diff) >>> stdDev = sd(diff) >>> cat( "stdDev = ", stdDev, "\n" ) >>> >>> if ( norm == TRUE ) { >>> diff = (diff - u) >>> diff = diff / stdDev >>> } >>> return (diff) >>> } >>> >>> I would like to generalize it to work for any stock by passing in the >>> stock symbol. So the header for the >>> function would be: >>> >>> getReturns <- function(symbol, norm = FALSE) >>> >>> Now how do I update this line: >>> length = length( AVB$AVB.Close ) >>> This statement will not work: >>> length = length( symbol$AVB.Close ) >>> because the name that holds the closing price is a function of the stock >>> symbol. >>> >>> Thanks, >>> Bob >>> >>> ______________________________________________ >>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >>> https://stat.ethz.ch/mailman/listinfo/r-help >>> PLEASE do read the posting guide >>> http://www.R-project.org/posting-guide.html >>> and provide commented, minimal, self-contained, reproducible code. > > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. -- Joshua Ulrich | about.me/joshuaulrich FOSS Trading | www.fosstrading.com R/Finance 2018 | www.rinfinance.com ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.