【发布时间】: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$date和stock()的样子,这有点困难。也许首先在非闪亮(非反应)模式下测试它是一个好的开始。不过,我的猜测是没有匹配,所以stock_date()是空的。 -
非常感谢。请看我的更新
-
完整的代码很长,包括绘图。当我单击绘图按钮时会发生错误。但我可以肯定的是,情节和其他架构没有任何问题,因为我已经以其他方式测试了它们的功能并且效果很好
-
我会尝试使用
browser()进行调试。例如:stock_date <- 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”是另一个通过另一个输入过滤的响应式选择器列表。