API R 中的每列调用
API Call per Column in R
我在数据框中有一列由股票代码组成,例如 AAPL(Apple)、TWTR(Twitter)等等。我想根据数据框中的股票代码数量创建新列,并用将从 API 检索的收盘价填充这些列。结果应如下所示:Click here for the expected output
然而,当我 运行 下面的代码时,它显示警告和错误,因为列之间的行数不同。有人对此有解决方案吗?
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")
这是使用不同方法解决问题的另一种方法。
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)
更新: 这将允许您构建 table 而无需手动 运行 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)
我在数据框中有一列由股票代码组成,例如 AAPL(Apple)、TWTR(Twitter)等等。我想根据数据框中的股票代码数量创建新列,并用将从 API 检索的收盘价填充这些列。结果应如下所示:Click here for the expected output
然而,当我 运行 下面的代码时,它显示警告和错误,因为列之间的行数不同。有人对此有解决方案吗?
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")
这是使用不同方法解决问题的另一种方法。
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)
更新: 这将允许您构建 table 而无需手动 运行 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)