блестящий-Почему меняется порядок панелей вкладок, tabPanel не отображает график?

Я новичок в shiny. Я хотел бы загрузить набор данных из файла и отобразить его в формате tabPanel. И следующий шаг — построить набор данных и отобразить график в другом tabPanel. Но я обнаружил, что когда порядок tabPanels был изменен, сюжет не отображался. Если бы "3D" tabPanel был первым, график был бы показан:

tabsetPanel(
            tabPanel("3D", webGLOutput("threeDPlot")), 
            tabPanel("Data", tableOutput("cont"))
          )

Но если бы «Данные» tabPanel были первыми, график не был бы показан:

tabsetPanel(
            tabPanel("Data", tableOutput("cont")),
            tabPanel("3D", webGLOutput("threeDPlot"))                 
          )

Любая помощь? Заранее спасибо!

ui.R

library(shiny)
library(shinyRGL)
library(rgl)

shinyUI(fluidPage(

  titlePanel(h2("TEST")),

  sidebarLayout(        
    sidebarPanel(
      fileInput("df", label = h3("Load .txt data"), accept=c('text/csv', 
                                                   'text/comma-separated-values,text/plain', 
                                                   '.csv'))  
    ),        
    mainPanel(
      tabsetPanel(
        tabPanel("3D", webGLOutput("threeDPlot")), 
        tabPanel("Data", tableOutput("cont"))
      )
    )
  )
))

служить.R

options(rgl.useNULL=TRUE)

library(shiny)
library(shinyRGL)
library(rgl)

shinyServer(function(input, output) {

  dataInput <- reactive({
    validate(
      need(input$df != "", label = "Data set")
    )  

    inFile <- input$df
    data <- read.table(inFile$datapath, header=TRUE, sep="")
    data
  })

  output$cont <- renderTable({
    dataInput()
  })

    output$threeDPlot <- renderWebGL({          
      mydata <- dataInput()          
      clr <- mydata$value/max(mydata$value)
      f <- colorRamp(c("green", "yellow", "purple", "red"))

      for(i in 1:length(mydata$x)){
        shade3d(translate3d(scale3d(cube3d(col=rgb(f(clr[i])/255), alpha=0.15),
                            10.0, 10.0, 2.5), mydata$x[i], mydata$y[i], mydata$z[i]))
      }
    })
})

test.txt

x y z value
1 3 5 33
2 4 6 45
3 6 9 72
4 8 12 81

person Just Rookie    schedule 12.07.2015    source источник
comment
У меня точно такая же проблема. Если вы нашли решения, дайте мне знать.   -  person discipulus    schedule 26.11.2015
comment
Я еще не нашел решение этой проблемы, и я снова столкнулся с проблемой. Так у вас есть какие-нибудь идеи?   -  person just_rookie    schedule 10.04.2016


Ответы (1)


У меня была такая же проблема раньше, и вы можете решить ее, настроив код server.R в соответствии с макетом ui.R.

По какой-то причине порядок, в котором вы размещаете свои tabPanels, ДОЛЖЕН соответствовать тому, как вы упорядочиваете операторы output$plot в Shiny. Я не могу дать вам объяснение, но ниже описано, как это исправить.

Я не понимаю, почему Shiny не просто ищет правильный оператор вывода, а вместо этого ищет правильный порядок.

РАБОТАЕТ

 #ui.R

mainPanel(
  tabsetPanel(
    tabPanel("3D", webGLOutput("threeDPlot")), 
    tabPanel("Data", tableOutput("cont"))
  )


#server.R

output$threeDPlot <- renderWebGL({          
  mydata <- dataInput()          
  clr <- mydata$value/max(mydata$value)
  f <- colorRamp(c("green", "yellow", "purple", "red"))

  output$cont <- renderTable({
  dataInput()
   })

Порядок, в котором ui.R вызывает операторы вывода server.R, имеет значение. Убедитесь, что вы сортируете его правильно!


Следующее НЕ будет выводиться должным образом!

НЕ РАБОТАЕТ

#ui.R

tabsetPanel(
        tabPanel("3D", webGLOutput("threeDPlot")), 
        tabPanel("Data", tableOutput("cont"))
      )

 #server.R

 output$cont <- renderTable({
dataInput()
 })

output$threeDPlot <- renderWebGL({          
  mydata <- dataInput()          
  clr <- mydata$value/max(mydata$value)
  f <- colorRamp(c("green", "yellow", "purple", "red"))
person infiniteflash    schedule 31.01.2016