#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 прерван»