【发布时间】:2015-11-17 11:09:20
【问题描述】:
我正在尝试创建一个闪亮的应用程序,根据数据集,ggvis 将创建一个散点图。该应用程序在开始时运行良好。但是如果我尝试将数据集更改为 mtcars,那么闪亮就会消失。
我的 ui.R -
library(ggvis)
library(shiny)
th.dat <<- rock
shinyUI(fluidPage(
titlePanel("Reactivity"),
sidebarLayout(
sidebarPanel(
selectInput("dataset", "Choose a dataset:",
choices = c("rock", "mtcars")),
selectInput("xvar", "Choose x", choices = names(th.dat), selected = names(th.dat)[1]),
selectInput("yvar", "Choose y", choices = names(th.dat), selected = names(th.dat)[2]),
selectInput("idvar", "Choose id", choices = names(th.dat), selected = names(th.dat)[3])
),
mainPanel(
ggvisOutput("yup")
)
)
))
server.R -
library(ggvis)
library(shiny)
library(datasets)
shinyServer(function(input, output, session) {
datasetInput <- reactive({
switch(input$dataset,
"rock" = rock,
"mtcars" = mtcars)
})
obs <- observe({
input$dataset
th.dat <<- datasetInput()
s_options <- list()
s_options <- colnames(th.dat)
updateSelectInput(session, "xvar",
choices = s_options,
selected = s_options[[1]]
)
updateSelectInput(session, "yvar",
choices = s_options,
selected = s_options[[2]]
)
updateSelectInput(session, "idvar",
choices = s_options,
selected = s_options[[3]]
)
})
xvarInput <- reactive({
input$dataset
input$xvar
print("inside x reactive," )
print(input$xvar)
xvar <- input$xvar
})
yvarInput <- reactive({
input$dataset
input$yvar
print("inside y reactive,")
print(input$yvar)
yvar <- input$yvar
})
dat <- reactive({
dset <- datasetInput()
xvar <- xvarInput()
# print(xvar)
yvar <- yvarInput()
# print(yvar)
x <- dset[, xvar]
y <- dset[,yvar]
df <- data.frame(x = x, y = y)
})
dat %>%
ggvis(~x, ~y) %>%
layer_points() %>%
bind_shiny("yup")
})
我尝试了很多方法,但仍然卡住了。任何帮助将不胜感激。
【问题讨论】:
-
它坏了,因为没有 dset[,xvar],而且 th.dat 仍然很摇滚。当数据集更改时,您应该响应式填充下拉列表。请注意,如果您“接受”之前问题的良好答案,则获得答案的机会更高。
-
如果您省略 ggvis 代码然后更改数据集,您将看到下拉列表相应更改。在我看来,问题是 input$xvar 和 input$yvar 的值在 dat 响应式中没有更新,我不知道如何强制。另外,我之前已经接受了我之前问题的解决方案。
-
...解决您以前的问题之一 ....
标签: r ggplot2 shiny shiny-server ggvis