Как прочитать csv-файл в shiny для загрузки в глобальную среду?

#r #shiny

#r #блестящий

Вопрос:

Привет, у меня есть это блестящее приложение. Вы можете запустить его и попробовать.

Это приложение помогает мне читать файлы csv и отображать таблицу с информацией из файла csv.

app.R

 library(shiny)



ui <- shinyUI(
  
  fluidPage(
    textInput("fname","File name: ",value="data.csv"),
    verbatimTextOutput("text"),
    actionButton("chck_file", "Check for file"),
    actionButton("create_file", "Create file"),
    
    #Data Table 
    tableOutput("table1")
    
  ))



server <- shinyServer(function(input, output, session) {
  
  # Listens for click from element with ID=chck_file
  observeEvent(input$chck_file,{
    # Check if file exists
    if ( file.exists( isolate({input$fname}) ) ){
      # Display text
      output$text <- renderText({ paste("File exists in: ",getwd(),sep="") })
      
      data <- input$fname
      print(data)
      df = read.csv(data)
      output$table1 <- renderTable(df)
      
      
      
    }
    else{
      output$text <- renderText({ paste("No such file in: ",getwd(),sep="") })
    }
  })
  
  # Listens for click from element with ID=create_file
  observeEvent(input$create_file,{
    # Create file
    file.create(isolate({input$fname}))
  })
})



shinyApp(ui = ui, server = server)

  

Я хочу иметь возможность загружать фрейм данных, который я читаю, в глобальную среду RStudio, как я могу это сделать?

Я пробовал с этим оператором <<-

 df <<- read.csv(data)
Warning: Error in observeEventHandler: cannot change value of locked binding for 'df'
  

Также я пробовал использовать это решение, но работает только тогда, когда я останавливаю свое блестящее приложение

 data <- reactiveValues()


output$contents <- renderText({    
      if(is.null(input$file1))return()
      inFile <- input$file1
      data2<-read.csv(inFile$datapath)
  assign('data',data2,envir=.GlobalEnv)
  print(summary(data))
 })

  

И я не хочу останавливать свой сеанс, чтобы увидеть мой фрейм данных в глобальной среде

Ответ №1:

 df <<- read.csv(data)
Warning: Error in observeEventHandler: cannot change value of locked binding for 'df'
  

Оператор <<- не означает присвоение в глобальной среде. Скорее, это означает «нелокальное назначение». Когда вы это делаете x <<- 2 , R выполняет поиск x в текущей среде, затем в родительской среде, если он ее не находит, и т.д., до глобальной среды. Если x никогда не найден, то R выполняет назначение в глобальной среде.

Вот df найдено: это имя функции в stats пакете. И нельзя изменить его значение. Поэтому вам нужно использовать другое имя. Но я не знаю, будет ли это иметь эффект перед закрытием приложения, я не пробовал.

Редактировать

Да, это работает, но вам нужно обновить панель среды во время работы приложения (нажмите на круглую стрелку на панели среды).

Комментарии:

1. Какой из них подходит вам? Ни одно из двух решений не работает для меня

2. Когда я попытался обновить панель среды, появилось сообщение «Сеанс R прерван»