【问题标题】:Subset in Shiny on index (date)索引上闪亮的子集(日期)
【发布时间】:2018-02-17 20:12:13
【问题描述】:

我正在使用包含日期列(第一列)的数据框 (stock)。我想按日期对其进行子集化。

stock_date <- reactive(which(stock()[, 1] == input$date[1]) - 1)
stock_sub <- reactive(stock()[-(1:stock_date(), ])

input$date[1] 是从dateRangeInput 开始的日期,第一行是定位该日期的索引。第二行是根据我们得到的索引对数据框进行子集化。

虽然我得到的错误是

长度为 0 的参数

我尝试使用match 代替which,但收到了相同的错误代码。

有人可以帮忙吗?非常感谢!

输入是这样的:

textInput("ticker", "Stock ticker:")
dateRangeInput("date", "Date Range:")

库存来自:

stock2 <-
    reactive(
      getSymbols(
        toupper(input$ticker),
        from = input$date[1] - 300,
        to = input$date[2],
        src = "google",
        auto.assign = F
      )
    )

  stock3 <- reactive(as.data.table(stock2()))
  stock <- reactive(as.data.frame(stock3()))

我还在控制台中尝试了以下操作,效果很好:

jpm <- getSymbols(
            "JPM",
            from = "2012-01-03",
            src = "google",
            auto.assign = F
          )
jpm <- as.data.table(jpm)
jpm <- as.data.frame(jpm)
which(jpm[, 1] == "2012-01-03")

返回 1

【问题讨论】:

  • 你能提出这个问题reproducible吗?如果不确切知道input$datestock() 的样子,这有点困难。也许首先在非闪亮(非反应)模式下测试它是一个好的开始。不过,我的猜测是没有匹配,所以stock_date() 是空的。
  • 非常感谢。请看我的更新
  • 完整的代码很长,包括绘图。当我单击绘图按钮时会发生错误。但我可以肯定的是,情节和其他架构没有任何问题,因为我已经以其他方式测试了它们的功能并且效果很好
  • 我会尝试使用browser() 进行调试。例如:stock_date &lt;- reactive({ browser()which(stock()[, 1] == input$date[1]) - 1}) 并检查stock()stock()[, 1] == input$date[1] 的内容。这是一个调试的链接:shiny.rstudio.com/articles/debugging.html
  • 我看不到您的数据,但我使用 data.table 和日期列作为键,然后处理响应式,例如:reactive( data.table::data.table( huFiltered() )[J(input$dateRange[1]:input$dateRange[2])] 其中“huFiltered”是另一个通过另一个输入过滤的响应式选择器列表。

标签: r shiny subset nan


【解决方案1】:

我们应该将subset 函数放在reactive 函数中并返回所需的data.frame。

例子:

stock.sub <- reactive({
    value <- subset(stock(), stock()[, 1] >= input$date[1])
    value
  })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 2020-02-03
    • 2017-08-21
    相关资源
    最近更新 更多