我将文件上传到闪亮(csv或excel),然后用文件数据创建一个对象。我希望这个对象是全局的,因为我使用不同输出的数据。
我的原始(简化)server.R代码是:
shinyServer(function(input, output) {
output$contents <- renderTable({
inFile <- input$file1
if (is.null(inFile))
return(NULL)
data <- read.csv(inFile$datapath, header = input$header, sep = input$sep, quote = input$quote, dec = ".")
data
})
output$grafic <- renderPlot({
inFile <- input$file1
if (is.null(inFile))
return(NULL)
data <- read.csv(inFile$datapath, header = input$header, sep = input$sep, quote = input$quote, dec = ".")
barplot(table(data$SEVERIDAD), main="Severitat dels riscos detectats")
})
})
所以,我必须重复代码才能创建对象&#34;数据&#34;两次。
在阅读其他帖子后,我尝试了这段代码,但没有工作:
inFile <- input$file1
if (is.null(inFile))
return(NULL)
data <- read.csv(inFile$datapath, header = input$header, sep = input$sep, quote = input$quote, dec = ".")
shinyServer(function(input, output) {
data <- reactive(data)
output$contents <- renderTable({
data <- data()
data
})
output$grafic <- renderPlot({
data <- data()
barplot(table(data$SEVERIDAD), main="Severitat dels riscos detectats")
})
})
我认为最后一段代码不起作用,因为加载应用程序时无法上传文件。
谢谢!
答案 0 :(得分:3)
为数据创建一个反应式表达式,然后将其用于所有魔法......注意代码尚未经过测试且仅供本地使用(如果有效,请告诉我)...对于全局实现您可以使用<<-
作为赋值运算符
shinyServer(function(input, output) {
# Read the file into my_data, storing the data in this variable
my_data <- reactive({
inFile <- input$file1
if (is.null(inFile))
return(NULL)
data <- read.csv(inFile$datapath, header = input$header, sep = input$sep,quote = input$quote, dec = ".")
data
})
# Create the table
output$contents <- renderTable({
my_data()
})
# Create a plot
output$grafic <- renderPlot({
barplot(table(my_data()$SEVERIDAD), main="Severitat dels riscos detectats")
})
})