r - R Shiny App 中的简单计算提供了与 Rstudio 中相同计算不同的输出
问题描述
在我的 Shiny App 中,我有三个输入。selectInput()
用户想要选择文章的地方;textInput()
用户想要指定股票的地方;触发. actionButton()
_ tableOutput()
这tableOutput()
为用户提供了一个数据框,其中包含与过滤器匹配的数据框中的第一个条目。
例如:用户想知道他选择的文章在他选择selectInput()
的股票中是在哪一周textInput()
。所以他选择了这篇文章34343
并想知道这篇文章什么时候34343
有 100 的可用库存。输出将给他第 1 周的答案,因为有 210.57 的可用库存。
我在这里面临的问题是,当我指定大于 210,57 的股票时,例如 211,预期的一周将是第 3 周,但输出显示其第 2 周的股票为 94.42,这基本上意味着 94.42大于 210.57。
怎么会这样?
library(shiny)
library(tidyverse)
df = tibble(id=as.integer(c(34343, 34343, 34343)), week=as.integer(c(1,2,3)), stock=as.double(c(210.57,94.42,412.31)))
ui <- fluidPage(
selectInput(inputId = "id", "Select", choices = df$id, multiple = F, selectize = T),
textInput(inputId = "stock", "Stock", placeholder = "i.e. 100"),
actionButton(inputId = "click", "Click"),
tableOutput(outputId = "table")
)
server <- function(input, output) {
result = eventReactive(input$click, {
df %>% filter(id %in% input$id) %>%
distinct(id, week, stock) %>%
group_by(id) %>%
slice(first(which(stock >= input$stock)))
})
output$table = renderTable({
result()
})
}
# Run the application
shinyApp(ui = ui, server = server)
解决方案
您的slice()
陈述必须是:
slice(first(which(stock >= as.numeric(input$stock))))
因为input$stock
是一个不会自动转换为数字的字符串。考虑这两个不同的过滤器语句是如何工作的:
> filter(df, stock >= "212")
# # A tibble: 2 x 3
# id week stock
# <int> <int> <dbl>
# 1 34343 2 94.4
# 2 34343 3 412.
> filter(df, stock >= 212)
# # A tibble: 1 x 3
# id week stock
# <int> <int> <dbl>
# 1 34343 3 412.
下面的代码产生预期的输出。
library(shiny)
library(tidyverse)
df = tibble(id=as.integer(c(34343, 34343, 34343)), week=as.integer(c(1,2,3)), stock=as.double(c(210.57,94.42,412.31)))
ui <- fluidPage(
selectInput(inputId = "id", "Select", choices = df$id, multiple = F, selectize = T),
textInput(inputId = "stock", "Stock", placeholder = "i.e. 100"),
actionButton(inputId = "click", "Click"),
tableOutput(outputId = "table")
)
server <- function(input, output) {
result = eventReactive(input$click, {
df %>% filter(id %in% input$id) %>%
distinct(id, week, stock) %>%
group_by(id) %>%
slice(first(which(stock >= as.numeric(input$stock))))
})
output$table = renderTable({
result()
})
}
# Run the application
shinyApp(ui = ui, server = server)
推荐阅读
- ios - 如何使用 iOS 13 在 iPhone 上启动场景的多个实例?
- java - 使用 mockito 更改 Final 字段
- php - 当 $_SERVER['QUERY_STRING'] 包含 'a=foo' 时,为什么不会填充 $_GET['a']?
- iframe - Mendix iFrame - 找不到页面
- java - 从 Java 中的未知 Groovy 类访问字段
- python - 如何在django models.py中查询相关模型
- vue.js - Vue.js 中 v-if/else 高度的平滑过渡
- amazon-web-services - 使用 AWS SQS 作为 Aurora 数据库的写入队列来提高系统性能是否有效
- python - 是否可以使用 Spark 从 Kubernetes 之外的外部 HBase 集群中读取数据进行处理?
- javascript - 向左移位在这里完成了什么?