我的代码有问题。每当我点击一个按钮时,我的情节(用ggvis构建)就会显示出来,但会立即消失。由于我的代码很长,下面的代码重现了我的问题。我想在我的渲染函数中重用反应数据帧test0,我想这正是导致我的问题的原因。但这对我来说至关重要。三个步骤(反应,观察,渲染)与我的代码相同。我非常感谢你的帮助!
server.R
library(shiny)
library(ggvis)
library(dplyr)
data(mtcars)
shinyServer(function(input, output) {
test0 <- reactive({
df <- mtcars %>% select(mpg, wt)
(input$NextCounter + 1)*df
})
observe({
df <- test0()
if (!is.null(df)) {
ggvis(df, x = ~wt, y = ~mpg) %>% bind_shiny("plotggvis")
}
})
output$test1 <- renderUI({
df <- test0()
ggvisOutput("plotggvis")
})
})
ui.R
库(有光泽)
shinyUI(fluidPage(
sidebarLayout(
sidebarPanel(
actionButton("NextCounter", "Next")
),
mainPanel(
uiOutput("test1")
)
)
))
答案 0 :(得分:0)
这个为我工作
library(shiny)
library(ggvis)
library(dplyr)
ui <- shinyUI(fluidPage(
sidebarLayout(
sidebarPanel(
actionButton("NextCounter", "Next")
),
mainPanel(
ggvisOutput("plotggvis")
)
)
))
server <- shinyServer(function(input, output) {
data(mtcars)
test0 <- reactive({
df <- mtcars %>% select(mpg, wt)
(input$NextCounter + 1)*df
})
my_graph <- reactive({
df <- test0()
ggvis(df, x = ~wt, y = ~mpg)
})
my_graph %>% bind_shiny("plotggvis")
})
})
shinyApp(ui = ui, server = server)
答案 1 :(得分:0)
您不需要在UI中使用ggvisOutput
来解决您的问题。实际上,代码中的问题是在观察者中有bind_shiny
函数,每次test0
数据更改时都会再次执行该函数。预计只会绑定你的ggvis一次,否则它会出现并立即消失的行为。此外,ggvis的一个重要特性是在数据发生变化时有一个很好的转换,因此每次数据更改时都不需要创建ggvis对象,只需确保在UI中只绑定一次ggvis对象。
以下是您的代码的修改版本,用于解决您的问题并显示数据的动画转换。
library(shiny)
library(ggvis)
library(dplyr)
data(mtcars)
ui <- fluidPage(fluidPage(
sidebarLayout(
sidebarPanel(
actionButton("NextCounter", "Next")
),
mainPanel(
uiOutput("test1")
)
)
))
server <- function(input, output) {
test0 <- reactive({
input$NextCounter
df <- mtcars %>% select(mpg, wt)
df[sample(nrow(df),nrow(df)/2), ]
})
output$test1 <- renderUI({
# bind the ggvis only once
test0 %>% ggvis(x = ~wt, y = ~mpg) %>% bind_shiny("plotggvis")
ggvisOutput("plotggvis")
})
}
shinyApp(ui, server)
您还可以通过将ggvis
放在反应式表达式中来使用输入小部件修改一些ggvis参数。