這個非常有用的平臺上的所有聰明人。我花了超過 12 個小時試圖讓它發揮作用(是的,我不聰明)。請幫我。
我想遍歷“文本輸入”值(用戶可以輸入任意數量的代碼)并將它們傳遞給我的 getSymbols.yahoo() 以便能夠計算我的投資組合回報。我還希望動態輸入 getSymbols.yahoo() 中“from”引數中的日期。請有人幫助我。
這是我的代碼:
library(quantmod)
library(PerformanceAnalytics)
library(imputeTS)
library(PortfolioAnalytics)
library(shiny)
ui<-fluidPage(
textInput("x","Enter tickers"),
dateInput("dt", "Select a date:"),
plotOutput("myplot")
)
server <- function(input, output){
p <- reactive({
portfolioPrices <- NULL
for(ticker in 1:input$x) {
portfolioPrices <- cbind(portfolioPrices,
getSymbols.yahoo(ticker,
from=input$dt, periodicity = 'daily', auto.assign=FALSE)[,4])
}
})
portfolioReturns <- na.omit(ROC(p))
在閃亮之外,此代碼看起來像
library(quantmod)
library(PerformanceAnalytics)
library(imputeTS)
library(PortfolioAnalytics)
tickers <- c("FB", "AAPL", "AMZN", "NFLX", "GOOGL")
portfolioPrices <- NULL
for(ticker in tickers) {
portfolioPrices <- cbind(portfolioPrices,
getSymbols.yahoo(ticker, from='2016-01-03', periodicity = 'daily', auto.assign=FALSE)[,4])
}
portfolioReturns <- na.omit(ROC(portfolioPrices))
再一次,如果有人能幫我解決這個問題,我將永遠感激不盡。
PS:我需要在閃亮的里面做這個。上面的“外部閃亮”代碼只是為了展示我正在嘗試做的事情的要點。
uj5u.com熱心網友回復:
您可以使用以下strsplit函式遍歷R 中逗號分隔的文本輸入:
p <- as.character(unlist(strsplit(input$x, ",")))
之后,您可以遍歷 p 并訪問該向量中的每個元素。
for (i in p) {
df <- cbind(df, getSymbols.yahoo(i, from = input$dt, periodicity = "daily", auto.assign = F)[,4])
}
這是我根據您的要求修改的代碼:
library(quantmod)
library(PerformanceAnalytics)
library(imputeTS)
library(PortfolioAnalytics)
library(shiny)
library(DT)
ui<-fluidPage(
textInput("x","Enter tickers"),
dateInput("dt", "Select a date:"),
actionButton("GO","GO"),
DT::dataTableOutput("table"),
plotOutput("myplot")
)
server <- function(input, output){
df <- NULL
data <- eventReactive(input$GO, {
req(input$dt)
p <- as.character(unlist(strsplit(input$x, ",")))
for (i in p) {
df <- cbind(df, getSymbols.yahoo(i, from = input$dt, periodicity = "daily", auto.assign = F)[,4])
}
return(df)
})
output$table <- DT::renderDataTable({
data()
})
}
shinyApp(ui = ui, server = server)
Ps:請注意,使用strsplit時不考慮兩個值之間的任何空格。您必須傳遞輸入文本,它們之間沒有空格。例如:amzn,aapl,fb而不是amzn, aapl, fb
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/384583.html
