【问题标题】:User defined function with ticker as input?以股票代码作为输入的用户定义函数?
【发布时间】:2020-12-11 22:02:55
【问题描述】:

这是我现在的代码:

f=function(Symbol, start, end, interval){
  getSymbols(Symbols=Symbol, from=start, to= end)
  Symbol=data.frame(Symbol)
  
  a=length(Symbol$Symbol.Adjusted)
  b=a/interval
  c=ceiling(b)
  
  origData=as.data.frame(matrix(`length<-`(Symbol$Symbol.Adjusted, c * interval), ncol = interval, byrow = TRUE))
  

  return(origData)
 
}
f("SPY", "2012-01-01", "2013-12-31", 10)

接下来我需要获取调整后的收盘价,并仅将这个价格数据用于以下任务。将每日股票调整收盘价拆分为 N 个块,作为数据框中的行。这样每个块包含M天(列)数据,其中M等于时间间隔值。在我的代码中它被称为 origData。 该函数应该返回数据框 origData,但每当我尝试运行它时,它都会告诉我 Symbol 数据框是空的。如何更改我的函数以获取数据框输出?

【问题讨论】:

    标签: r function ticker


    【解决方案1】:

    @IRTFM 的观察是正确的。结合这些更改,您可以将函数更改为:

    library(quantmod)
    
    f = function(Symbol, start, end, interval){
      getSymbols(Symbols=Symbol, from=start, to= end)
      data= get(Symbol)
      col = data[, paste0(Symbol, '.Adjusted')]
      a=length(col)
      b=a/interval
      c=ceiling(b)
      origData= as.data.frame(matrix(`length<-`(col, c * interval), 
                              ncol = interval, byrow = TRUE))
      return(origData)
    }
    
    f("SPY", "2012-01-01", "2013-12-31", 10)
    

    【讨论】:

      【解决方案2】:

      我还没有弄清楚data.matrix 调用中的表达式集应该做什么,你也没有努力解释你的意图。但是,您的错误发生在更远的地方。如果您对str(Symbol) 进行调试调用,您将看到Symbol 将评估为“SPY”,但这只是一个字符值而不是R 对象名称。您所拥有的对象名为SPY,当您只能访问字符值时检索对象值的方法是使用R函数get,因此请尝试在函数内部的getSymbols调用之后添加:

       library(quantmod) # I'm assuming this was the package in use
      
        ...
            Symbol=data.frame( get(Symbol) )
            str(Symbol)  # will print the result at your console
            ....
            # then perhaps you can work on what you were trying inside the data.matrix call
      

      您还会发现名称 Symbol.Adjusted 将不起作用(因为 R 不是宏语言)。您需要执行以下操作:

       a=length( Symbol[[ paste0(Symbol, ".Adjusted")]] )
      

      哦,等等。您覆盖了Symbol 的值。那是行不通的。您需要为数据框使用不同的名称。那么,您为什么不编辑您的问题以修复我迄今为止发现的错误,并描述您在使用as.data.frame 时尝试执行的操作。

      【讨论】:

        猜你喜欢
        • 2011-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多