【问题标题】:creating a function for getsymbols为getsymbols创建一个函数
【发布时间】:2019-09-30 17:59:23
【问题描述】:

我正在尝试创建一个函数,该函数将股票作为输入并使用 getSymbols 从 yahoo Finance 返回股票价格数据,但是当我尝试使用该函数时,我收到此错误“[.xts( Symbols, Symbols == x) : 'i' or 'j' out of range"

这是代码


library(quantmod) 
pelumi=function(stock){
  stock.e=getSymbols(stock , auto.assign = T)
  ty=as.data.frame(stock.e)
  return(ty)
}

【问题讨论】:

  • 这是一个很简单的问题。您必须将字符串传递给您的函数。 getSymbols() 仅将字符串或字符串向量作为参数。尝试输入 getSymbols(SPY),你会得到同样的错误。你必须传递一个字符串。 getSymbols("SPY")

标签: r function yahoo-finance stock


【解决方案1】:

既然您已经在使用quantmod,为什么不直接使用getQuote

例如,从雅虎获取苹果的股票价格:

library(quantmod)
getQuote("AAPL", src = "yahoo")

【讨论】:

  • 不,这是我正在创建的理论函数。我想知道为什么名为 pelumi 的函数给了我这个错误:“[.xts(Symbols, Symbols == x) 中的错误:'i' or 'j' out of range”
  • 你在估算什么?当我尝试pelumi("AAPL") 我得到:stock.e 1 AAPL 并且没有错误
  • @Greg 你对他太容易了哈哈,他应该自己解决这个问题。如果你问我,问题很简单。他的问题是,他没有在函数中调用字符串。
【解决方案2】:
stock = c('CA.PA','^FCHI','BN.PA','BNP.PA','RNO.PA')
stockData <- new.env() 


rec_data <-
  function(stock) {
    getSymbols(
      stock,
      env = stockData,
      src = "yahoo",
      auto.assign = TRUE,
      warnings = FALSE
      )
    rs <- na.omit(stock)
    return(rs)
  }

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,但它没有解释为什么或如何回答这个问题。请include an explanation for your code,因为这确实有助于提高您的帖子质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。您可以使用edit 按钮改进此答案以获得更多选票和声誉!
【解决方案3】:

代码中的主要问题是因为您设置了auto.assign = T。这意味着结果将被加载到parent.frame()。通过键入?getSymbols 查看getSymbols 的帮助文件。您需要将 auto.assign 设置为 FALSE 才能在函数内返回结果。代码如下:

> library(quantmod) 
> pelumi=function(stock){
+   stock.e=getSymbols(stock , auto.assign = FALSE)
+   ty=as.data.frame(stock.e)
+   return(ty)
+ }
> pelumi("IBM")
           IBM.Open IBM.High IBM.Low IBM.Close IBM.Volume IBM.Adjusted
2007-01-03    97.18    98.40   96.26     97.27    9196800     66.10009
2007-01-04    97.25    98.79   96.88     98.31   10524500     66.80686
2007-01-05    97.60    97.95   96.91     97.42    7221300     66.20204
2007-01-08    98.50    99.50   98.35     98.90   10340000     67.20779
2007-01-09    99.08   100.33   99.07    100.07   11108200     68.00288
2007-01-10    98.50    99.05   97.93     98.89    8744800     67.20101
...

【讨论】:

    猜你喜欢
    • 2019-03-14
    • 2015-11-11
    • 2019-11-01
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多