首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中循环遍历文本输入

在R中循环遍历文本输入
EN

Stack Overflow用户
提问于 2021-12-16 03:02:17
回答 1查看 94关注 0票数 0

在这个非常有用的平台上的所有聪明的人。我已经花了超过12个小时试图让这个工作(是的,我不聪明)。请帮帮我。

我希望循环“文本输入”值(用户可以输入任意数量的代码),并将它们传递给我的getSymbols.yahoo(),以便计算我的投资组合回报。我还希望动态输入getSymbols.yahoo()中'from‘参数中的日期。谁来帮帮我。

这是我的代码:

代码语言:javascript
复制
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))

除了闪亮的代码之外,这段代码看起来就像

代码语言:javascript
复制
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:我需要在闪闪发亮的情况下这样做。上面的“外面闪闪发亮”的代码只是为了给出我想要做的事情的要点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-16 12:29:02

您可以使用strsplit函数作为折叠来循环R中以逗号分隔的文本输入:

代码语言:javascript
复制
p <- as.character(unlist(strsplit(input$x, ",")))

在此之后,您可以在p上循环,并访问该向量中的每个元素。

代码语言:javascript
复制
for (i in p) {
      df <- cbind(df, getSymbols.yahoo(i, from = input$dt,  periodicity = "daily", auto.assign = F)[,4])
    }

下面是我根据您的需求修改的代码:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70373363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档