[R] Trying to Generalize a Function in R

rsherry8 r@herry8 @end|ng |rom comc@@t@net
Fri Aug 10 19:32:33 CEST 2018


Duncan,

Since you asked, here is an updated version of my function.

# This method gets the Data.
getReturns1 <- function(symbol, norm = FALSE)
{
     library(quantmod)

     series = getSymbols(symbol, src = "yahoo", from = start, to = end, 
auto.assign = FALSE)
     length <- nrow(  series )
     close <- as.numeric(series[, paste0(symbol, ".Close")])
     cat( "length = ", length(close ), "\n" )
     diff = seq(1:(length-1))
     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
     }
     cat( "length = ", length(diff ), "\n" )

     return (diff)
}

I believe it is now working correctly. I did add the following statement:
         diff = seq(1:(length-1))
I thank you for your help. I also think the version of the function
posted by Joshua Ulrich is better. I found his post to be very educational.

Bob

On 8/9/2018 6:48 PM, Duncan Murdoch wrote:
> On 09/08/2018 6:21 PM, rsherry8 wrote:
>> Duncan,
>>
>> You are right and when I run with auto.assign=FALSE it works.
>
> You should post your working version of the function to the mailing list.
>
> Duncan Murdoch
>
>>
>> Thank you very much,
>> Bob
>>
>> On 8/9/2018 6:11 PM, Duncan Murdoch wrote:
>>> On 09/08/2018 4:56 PM, rsherry8 wrote:
>>>> Duncan,
>>>>
>>>> Thanks for the response. I tired the following:
>>>>        >  series <- getSymbols("AVB", src = "yahoo", from = start, to
>>>> = end)
>>>
>>> You missed the auto.assign=FALSE argument.
>>>
>>>>        > 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?
>>>
>>> Won't help here, but often str() is more informative than typeof().
>>>
>>> Duncan Murdoch
>>>
>>>>
>>>> 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:51 PM, Duncan Murdoch wrote:
>>>>> On 09/08/2018 1:12 PM, rsherry8 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)
>>>>>
>>>>> The quantmod function getSymbols has arguments auto.assign which
>>>>> defaults to TRUE.  Set it to FALSE, and then keep the result of the
>>>>> call, instead of assuming that a variable named AVB has been created.
>>>>>
>>>>> That is,
>>>>>
>>>>>          series <- getSymbols(symbol, src = "yahoo", from = start, 
>>>>> to =
>>>>> end, auto.assign = FALSE)
>>>>>          length <- nrow(  series )
>>>>>
>>>>> It will still name the columns according to the symbol, so you would
>>>>> also need
>>>>>
>>>>>         close <- as.numeric(series[, paste0(symbol, ".Close")])
>>>>>
>>>>> Duncan Murdoch
>>>>>
>>>>>>
>>>>>> 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 using 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.
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
>




More information about the R-help mailing list