在这个非常有用的平台上的所有聪明的人。我已经花了超过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:我需要在闪闪发亮的情况下这样做。上面的“外面闪闪发亮”的代码只是为了给出我想要做的事情的要点。
发布于 2021-12-16 12:29:02
您可以使用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)请注意,当您使用strsplit时,它不考虑两个值之间的任何空格。您必须在它们之间传递没有空格的输入文本。例如:amzn,aapl,fb而不是amzn, aapl, fb
https://stackoverflow.com/questions/70373363
复制相似问题