我正在使用一个函数来打印绘图。这个函数只会被调用一次,以便将绘图打印到 UI(当我点击“Go”按钮时)。问题是绘图只打印到控制台而不是用户界面。没有错误信息。我认为我的 renderPlot 可能有问题。这是我的代码:
界面
library(shiny)
shinyUI(fluidPage(
titlePanel("test"),
sidebarLayout(
sidebarPanel(
actionButton("Go", "Go!")
),
mainPanel(
plotOutput("FUN3")
)
)
))
服务器
library(shiny)
library(quantmod)
library(PerformanceAnalytics)
shinyServer(function(input, output) {
RunPlot <- function(tickers, sharesVec, FromDate, ToDate){
PortfolioPrices <- NULL
for (i in tickers){
PortfolioPrices <- cbind(PortfolioPrices,
getSymbols.yahoo(i, from = FromDate, to = ToDate,
auto.assign = F)[,6])
}
TempValue <- PortfolioPrices[1,]
MarketValue <- sharesVec*TempValue
Weights <- MarketValue/sum(MarketValue) #Now have Weights AND Tickers vectors
#C) Compute Portfolio Returns
for (j in 1:ncol(PortfolioPrices)){ #Data cleaning
for (i in 1:nrow(PortfolioPrices)){
if (is.na(PortfolioPrices[i,j]) == TRUE){
PortfolioPrices[i,j] <- PortfolioPrices[i-1,j]
}
}
}
Rf <- getQuote("^TNX", src = "yahoo")[1,2]/100
AssetsReturns <- na.omit(ROC(PortfolioPrices, type = "discrete"))
PortfolioReturns <- Return.portfolio(AssetsReturns, weights = Weights)
PortfolioAnnualizedReturns <- table.AnnualizedReturns(PortfolioReturns, Rf = Rf/252)
colnames(PortfolioAnnualizedReturns) <- "Portfolio"
#D) Compute Benchmark Returns
SP500 <- getSymbols.yahoo("SPY", from = FromDate, to = ToDate, auto.assign = F)[,6]
SP500Returns <- na.omit(ROC(SP500, type = "discrete"))
SP500AnnualizedReturns <- table.AnnualizedReturns(SP500Returns, Rf = Rf/252)
colnames(SP500AnnualizedReturns) <- "S&P500"
SPTSX <- getSymbols.yahoo("XIC.TO", from = FromDate, to = ToDate, auto.assign = F)[,6]
SPTSXReturns <- na.omit(ROC(SPTSX, type = "discrete"))
SPTSXAnnualizedReturns <- table.AnnualizedReturns(SPTSXReturns, Rf = Rf/252)
colnames(SPTSXAnnualizedReturns) <- "S&P/TSX"
MSCIIMI <- getSymbols.yahoo("XEF.TO", from = FromDate, to = ToDate, auto.assign = F)[,6]
MSCIIMIReturns <- na.omit(ROC(MSCIIMI, type = "discrete"))
MSCIIMIAnnualizedReturns <- table.AnnualizedReturns(MSCIIMIReturns, Rf = Rf/252)
colnames(MSCIIMIAnnualizedReturns) <- "MSCI EAFE IMI"
MSCIEME <- getSymbols.yahoo("XEC.TO", from = FromDate, to = ToDate, auto.assign = F)[,6]
MSCIEMEReturns <- na.omit(ROC(MSCIEME, type = "discrete"))
MSCIEMEAnnualizedReturns <- table.AnnualizedReturns(MSCIEMEReturns, Rf = Rf/252)
colnames(MSCIEMEAnnualizedReturns) <- "MSCI Emerging Markets"
#E) Format Data
PortfolioCumReturns <- fortify.zoo(PortfolioReturns+1)
SP500CumReturns <- fortify.zoo(SP500Returns+1)
SPTSXCumReturns <- fortify.zoo(SPTSXReturns+1)
MSCIIMICumReturns <- fortify.zoo(MSCIIMIReturns+1)
MSCIEMECumReturns <- fortify.zoo(MSCIEMEReturns+1)
for (j in 2:nrow(PortfolioCumReturns)){
PortfolioCumReturns[j,2] <- PortfolioCumReturns[j-1,2]*PortfolioCumReturns[j,2]
}
for (j in 2:nrow(SP500CumReturns)){
SP500CumReturns[j,2] <- SP500CumReturns[j-1,2]*SP500CumReturns[j,2]
}
for (j in 2:nrow(SPTSXCumReturns)){
SPTSXCumReturns[j,2] <- SPTSXCumReturns[j-1,2]*SPTSXCumReturns[j,2]
}
for (j in 2:nrow(MSCIIMICumReturns)){
MSCIIMICumReturns[j,2] <- MSCIIMICumReturns[j-1,2]*MSCIIMICumReturns[j,2]
}
for (j in 2:nrow(MSCIEMECumReturns)){
MSCIEMECumReturns[j,2] <- MSCIEMECumReturns[j-1,2]*MSCIEMECumReturns[j,2]
}
PortfolioCumReturns <- PortfolioCumReturns - 1
SP500CumReturns <- SP500CumReturns - 1
SPTSXCumReturns <- SPTSXCumReturns - 1
MSCIIMICumReturns <- MSCIIMICumReturns - 1
MSCIEMECumReturns <- MSCIEMECumReturns - 1
### Results ###
ReturnsTABLE <- cbind(PortfolioAnnualizedReturns,SP500AnnualizedReturns,SPTSXAnnualizedReturns,MSCIIMIAnnualizedReturns,MSCIEMEAnnualizedReturns)
Benchmark <- getSymbols.yahoo("^GSPC", from = FromDate, to = ToDate, auto.assign = F)[,6]
BenchmarkReturns <- na.omit(ROC(Benchmark, type = "discrete"))
BETA <- CAPM.beta(PortfolioReturns, BenchmarkReturns, Rf/252)
ALPHA <- CAPM.jensenAlpha(PortfolioReturns, BenchmarkReturns, Rf/252)
plot(PortfolioCumReturns, type = "l", xlab = "Time", ylab = "Returns", main = "Performance Overview",
ylim = range(min(PortfolioCumReturns[,2],SP500CumReturns[,2],SPTSXCumReturns[,2],MSCIIMICumReturns[,2],MSCIEMECumReturns[,2]),
max(PortfolioCumReturns[,2],SP500CumReturns[,2],SPTSXCumReturns[,2],MSCIIMICumReturns[,2],MSCIEMECumReturns[,2])), xaxs="i")
lines(SP500CumReturns, col = "firebrick")
lines(SPTSXCumReturns, col = "steelblue")
lines(MSCIIMICumReturns, col = "grey68")
lines(MSCIEMECumReturns, col = "slateblue")
grid(col = "black", nx = 12, ny = NULL)
legend("topleft", legend = c("Portfolio","S&P500","S&P/TSX","MSCI EAFE IMI","MSCI Emerging Markets"), col = c("black", "firebrick","steelblue","grey68","slateblue"), cex = 0.8, lty = 1.2)
}
output$FUN3 <- renderPlot({
observeEvent(input$Go, {
RunPlot("MSFT",5,
"2019-12-31",
"2020-12-31")
})
})
})
任何帮助将不胜感激!谢谢