r - 为交互式闪亮小部件参数制作反应变量
问题描述
我想制作由名为“kit”的组规范子集的权重数据集(df)的直方图。该应用程序应该有一个操作按钮来提交一个文本输入字段以指定数据集的套件分组和一个 2 路 Inputslider,最终将在直方图上显示两条垂直线。因为重量范围因套件而异,所以我希望滑块输入边界是交互式的,更新为稍微超出子集数据集的最小和最大权重。
我尝试使用 ui 函数中的 uiOutput 调用来实现它,并通过使用 reactiveValues 选项创建反应变量来更新小部件和直方图参数,例如本示例Update sliderInput in Shiny reactively。
界面功能
library(tidyverse)
library(stringr)
library(dplyr)
library(ggplot2)
library(shiny)
df = data.frame(list(x = rnorm(20), y = rnorm(20,5,3), z = rnorm(20,5,.4) )) %>% gather(key = 'kit', value = 'weight')
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
em('Select a kit and a weight range for it.'),
textInput('kit', strong('Enter Kit Number'), value='107066'),
actionButton('kitSelect','Select Kit'),
uiOutput('slider'),
sliderInput('bins','Number of Bins', min = 5, max = 30, val= 15)
),
mainPanel(
plotOutput('hist')
)
)
)
服务器功能:
server <- function(input, output, session) {
kitSelect = reactiveValues()
observeEvent(input$kitSelect, {
#subset data by kit
kitSelect$histdf = df %>% filter( kit == input$kit) %>% select(weight)
weightrange = range(kitSelect$histdf)[2] - range(kitSelect$histdf)[1]
#min and max parameters for slider buttons
kitSelect$a = range(kitSelect$histdf)[1] - weightRange*.1
kitSelect$b = range(kitSelect$histdf)[2] + weightRange*.1
#bin width for histogram
kitSelect$width = (b-a)/input$bins
})
output$slider = renderUI({
sliderInput('slider', 'Kit Range', min = kitSelect$a, max = kitSelect$b, value = c(kitSelect$a, kitSelect$b))
})
output$hist= renderPlot({
ggplot(kitSelect$histdf, aes(x= weight)) +
geom_histogram(color = 'blue', fill = 'blue', alpha = .5, binwidth = kitSelect$width) +
stat_bin(aes(label = ..count../dim(dfHist)[1]), geom = 'text', vjust = -.5)+
scale_x_continuous( breaks= seq(kitSelect$a, kitSelect$b, width)) +
stat_function(fun=dnorm, n =501, args = list(mean = mean(kitSelect$histdf), sd = sd(kitSelect$histdf)))
})
}
我在 renderUI 调用中收到“下标越界”错误,我不知道这意味着什么。
解决方案
推荐阅读
- python - AttributeError: 'RDD' 对象没有属性 'show'
- python - Zipline 基本数据
- git - 由于文件名太长的问题,无法签出 Mule 代码
- ethereum - Ropsten(以太坊测试网络)交易无法解决(仍待处理),使用 Web3js
- tfs - TFS2018:暂停和恢复后执行的并行构建
- java - Webstart 上的多个 JAR 应用程序
- javascript - 如何动态放大amchart地图
- mysql - 多日期时间列索引的最佳数据库解决方案
- java - 如何使用 spring-cloud-contract 获得上一个请求的响应
- java - 尝试将 AndroidJUnit4 与标准 JUnit 运行器和委托运行器“org.robolectric.RobolectricTestRunner”一起使用,但无法加载