R闪亮:如何创建一个输出作为闪亮的输入?

时间:2017-01-12 21:55:19

标签: r shiny

我的任务是:

  • 从它们的正态分布中随机选择两个独立变量(A和B)
  • 显示直方图,
  • 随机第三变量(C),其分布取决于值B,
  • 显示C的直方图。 我希望所有三个直方图对输入的变化都很敏感。 A和B的直方图是反应性的。 我能用C做什么?任何帮助将不胜感激。

这是我的尝试:

UI:

   library(shiny)
   fluidPage(
   titlePanel("Random"),

   sidebarLayout(
   sidebarPanel(
   sliderInput("obs", 
              "Number of observations:", 
              min = 1,
              max = 100, 
              value = 50)
),

mainPanel(
  tabsetPanel(type="tabs",
              tabPanel("plot 1 and plot 2",plotOutput("plot1"), plotOutput("plot2")),
              tabPanel("plot 3",plotOutput("plot3"))
  ))))

服务器:

shinyServer(function(input, output) {
output$plot1 <- renderPlot({

 {
  values_B <-rnorm(input$obs, 25,6) 
  assign('B_values', round(values_B), envir=.GlobalEnv)
  hist(B_values, main="Histogram of B values", xlab="values")}
 })
  output$plot2 <- renderPlot({ 
  values_A<-rnorm(input$obs,20, 4.5) 
  assign('A_values', round(values_A), envir=.GlobalEnv)
  hist(A_values, main="Histogram of A values", xlab="values")
 })
 output$plot3 <- renderPlot({
category <- function(x) if ( x <=10) round(rnorm(1,50,10)) else  round(rnorm(1,10,2))
assign('C_values', as.numeric(lapply(B_values, category)))
hist(C)
 })
})

1 个答案:

答案 0 :(得分:0)

这不起作用的原因是因为您需要使用B_values创建一个反应变量,因为您无法在renderPlot函数中定义一个反应变量并再次使用它,因此您的代码无法在绘图中工作3因为你对plot1中的变量有依赖性。您必须将其定义为如图所示的无功值,然后在renderPlot中调用它。

请注意,调用反应变量时,必须在变量名后使用括号。

我建议您在闪亮的网站上观看闪亮的教程,这对理解反应性的工作原理非常有帮助。

这是您的示例的服务器端,以便它可以工作。

shinyServer(function(input, output) {

reactiveB <- reactive({
    rnorm(input$obs, 25,6)
})

output$plot1 <- renderPlot({

 {

  values_B <- reactiveB() 
  assign('B_values', round(values_B), envir=.GlobalEnv)
  hist(B_values, main="Histogram of B values", xlab="values")}
 })
  output$plot2 <- renderPlot({ 
  values_A<-rnorm(input$obs,20, 4.5) 
  assign('A_values', round(values_A), envir=.GlobalEnv)
  hist(A_values, main="Histogram of A values", xlab="values")
 })
 output$plot3 <- renderPlot({
B_values <- reactiveB()
category <- function(x) if ( x <=10) round(rnorm(1,50,10)) else  round(rnorm(1,10,2))
assign('C_values', as.numeric(lapply(B_values, category)))
 hist(C_values)
})
})