全球环境中提供的数据,但价值无法访问

时间:2017-06-30 08:28:27

标签: r shiny environment

Hi Shiny用户,

我一直在努力解决这个问题,感谢你的帮助。

目标:使用updateSelectInput刷新下拉列表中的变量选择。

问题:下拉列表为空,即使"存在("数据",envir = .GlobalEnv)"表示"数据"存在。

以下是我的代码。请注意"数据"是在myFunctions.R中创建的全局数据集。

RAWDATA:

colA <- c('1','2','3','3','2')
colB <- c('1','1','3','3','2')
colC <- c('14','12','33','33','26')
rawdata <- as.data.frame(cbind(colA,colB, colC))

ui.R:

fluidPage(
    navbarPage(strong("My Structure"), id = "allResults",
             tabPanel(value ='inputData', title = 'Run Structure',
                sidebarLayout(
                    sidebarPanel(
                        actionButton("runButton", "Run Structure!"),
                        br(),
                        br(),
                        selectInput("selectvar", label = ("Select a variable"), choices = "")
                    ),

                    mainPanel(
                        DT::dataTableOutput('structure')
                    )
                )
             ),

            tabPanel(value='temp',title="TEMP", verbatimTextOutput("temp"))
    )
)

server.R:

source("./myFunctions.R")    
library("DT")

function(input, output, session) {

    # Run functions

    structure_result <- eventReactive (input$runButton, {
       assign('data', rawdata, envir=.GlobalEnv)
       PrepareData(rawdata)
       as.data.frame(head(data))
    })

    # Make a reactive copy of 'data' (a global dataset created in myFunctions.R)

    data_copy <- reactiveValues()

    observe({
      if(exists("data") && is.data.frame(get("data", envir =.GlobalEnv))) {
        data_copy$df <- get("data", envir = .GlobalEnv)
      } 
    })        

    # Update SelectInput drop down list

    observe({
        req(data_copy$df) 
        updateSelectInput(session, "selectvar", choices = names(data_copy$df [ , 1:ncol(data_copy$df)]))
    })        

    # Selected variable

    var_dd <- reactiveValues()

    observeEvent(input$selectvar, {
        req(data_copy$df) 
        var_dd$selected <- match(input$selectvar, names(data_copy$df [ , 1:ncol(data_copy$df)]))
    })    

    # Display structure results

    output$structure <- DT::renderDataTable({
          DT::datatable(structure_result(), options = list(paging = FALSE, searching = FALSE))           
    })

}

myFunctions.R:

PrepareData<-function(data) {
  data<<-RankData(data)
}

RankData<-function(datax) {
  return(datax[order(datax[,1],datax[,2]),])
}

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

您必须在服务器函数内部(而不是之前)获取函数,并使用local = TRUE选项。

library("DT")

function(input, output, session) {
    source("./myFunctions.R", local=TRUE)  
    # ...
}

在这里,您可以找到有关闪亮范围规则的更多信息:Link