我的任务是:
这是我的尝试:
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)
})
})
答案 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)
})
})