0

AAPL (Apple の場合)、TWTR (Twitter の場合) などのティッカー コードで構成されるデータ フレームに 1 つの列があります。データ フレームからのティッカー コードの数に基づいて新しい列を作成し、それらの列に API から取得される株価の終値を入力したいと考えています。結果は次のようになります。期待される出力については、ここをクリックしてください。

ただし、以下のコードを実行すると、列間の行数が異なるため、警告とエラーが表示されます。誰もこれに対する解決策を持っていますか?

library(Quandl)

portfolio <- data.frame(Code=c("AAPL", "TWTR", "MSFT"),
                    stringsAsFactors=FALSE)


analytic <- function(pf, startDate) {
  z <- do.call(cbind.data.frame, lapply(seq(1:nrow(pf)), function(x) {
   API <- Quandl(paste0("WIKI/", pf$Code[x]),
              type = "raw", 
              start_date = startDate, 
              end_date=Sys.Date())
   ValuebyDate <- API[,c("Date", "Close")]
   return(ValuebyDate)
}))
return(z)
}

analytic(portfolio, "2016-01-01")
4

1 に答える 1

0

別のアプローチを使用して問題を解決する別の方法を次に示します。

rm(list=ls())
library(tseries)
portfolio <- data.frame(Code=c("AAPL", "TWTR", "MSFT"),
                stringsAsFactors=FALSE)
startDate = "2016-01-04"

getHistData <- function(x){

  ts <- get.hist.quote(instrument = portfolio$Code[x], start = startDate, end = Sys.Date(),
                                      quote = "Close", provider = "yahoo", retclass = "zoo")
  names(ts) <- portfolio$Code[x]
  head(ts)
  return(ts)
}

ts1 = getHistData(1)
head(ts1)
ts2 = getHistData(2)
head(ts2)
ts3 = getHistData(3)
head(ts3)

cbind(ts1,ts2,ts3)

更新: これにより、手動で ts1、ts2、ts3 を実行せずにテーブルを構築できます

library(zoo)
stockPrice <- zoo()

for (i in 1: length(portfolio$Code)) {
  ts <- getHistData(i)
  stockPrice <- zoo(merge(ts, stockPrice, all=TRUE))
}

head(stockPrice)
于 2016-05-10T04:16:15.517 に答える