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
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 <rsherry8 at 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 at 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.
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 <rsherry8 at 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 at 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.
Duncan, Thanks for the response. I tired the following: > series <- getSymbols("AVB", src = "yahoo", from = start, to = end) > series[0] character(0) > nrow( series ) NULL nrow( series ) returned NULL. I do not understand why. I am thinking that there should be an R command to tell me about the structure of series. I tried: typeof( series ) and got: "character". Is there a better command for me to use other than typeof? I also tried this command: c1 <- as.numeric(series[, paste0(symbol, ".Close")]) where symbol held the value "AVB" and I got: Error in series[, paste0(symbol, ".Close")] : incorrect number of dimensions Please help. 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 <rsherry8 at 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 at 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.