2017-06-30 36 views
0

嗨伙同Shiny用户,全球环境下的数据,但价值不可访问

我一直在努力与这个bug的一天,真的很感谢您的帮助。

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

问题:尽管“exists(”data“,envir = .GlobalEnv)”表示“data”存在,但下拉列表为空。

以下是我的代码。请注意,“数据”是在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]),]) 
} 

任何帮助将不胜感激。谢谢!

回答

0

你必须在服务器功能内部(而不是之前)使用你的函数,并使用local = TRUE选项。

library("DT") 

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

这里你可以找到上闪亮的作用域规则的详细信息:Link

+0

谢谢你,直到。但它仍然不起作用。下拉列表仍然是空的。任何输入将不胜感激! – Ketty