На данный момент я пытаюсь сделать следующее: импортировать файл в Rshiny, присвоить ему номер (интерактивно), а затем перейти к следующему файлу. Эта часть работает нормально. Однако я также хотел бы сохранять данные каждой итерации, а затем отображать их в пользовательском интерфейсе. Однако это не работает. Итак, я предполагаю, что что-то не так с реактивностью, но я не уверен, как это исправить.
ui<-fluidPage(
mainPanel(
radioButtons(inputId="score",label="Give a score",choices=c(1:9),selected=1),
actionButton(inputId="new","Next file"),
tableOutput("savdat")
)
)
server<-function(input,output){
NoFiles<-length(list.files())
Здесь пустой реактивный data.frame
outputdata<-reactive(data.frame("file"="file","score"="score"))
filename<-eventReactive(input$new,{
WhichFile<-sample(1:NoFiles,1)
filename<-list.files()[WhichFile]
return(filename)
})
scores<-eventReactive(input$new,{
return(input$score)
})
Затем я хотел бы добавить предыдущие значения выходных данных с новыми значениями. Но это не работает
outputdata<-eventReactive(input$new,{
rbind(outputdata(),filename(),scores())
})
output$savdat<-renderTable(outputdata())
}
shinyApp(ui, server)
Любой совет приветствуется
1 ответ
Похоже, вы хотите, чтобы реактивность происходила каждый раз, когда вы нажимаете кнопку «Следующий файл». Я переписал ваш код, чтобы он отвечал только один раз, используя ObserveEvent при каждом нажатии кнопки «Следующий файл». Вторая задача - позволить значениям сохраняться при каждом реактивном событии. Хотя есть несколько способов справиться с этим, я выбрал целесообразный метод, оператор присваивания «<< -», чтобы разрешить сохранение «выходных данных» переменной (как правило, это не очень хорошая методика программирования). Поскольку переменная outputdata существует во всех средах, вам необходимо очищать среду каждый раз, когда вы хотите запустить эту программу.
Вот мой вариант перезаписи с использованием того же пользовательского интерфейса, который вы создали:
ui<-fluidPage(
mainPanel(
radioButtons(inputId="score",label="Give a score",choices=c(1:9),selected=1),
actionButton(inputId="new","Next file"),
tableOutput("savdat")
)
)
server<-function(input,output){
NoFiles<-length(list.files())
setupData <- function(filename,score) {
data <- data.frame(filename,score,stringsAsFactors = FALSE)
return(data)
}
observeEvent (input$new, {
WhichFile<-sample(1:NoFiles,1)
filename<-list.files()[WhichFile]
if (!exists(c('outputdata'))) {
score <- input$score
outputdata <<- data.frame (filename,score,stringsAsFactors = FALSE)
}
else {
outputdata <<- rbind(outputdata,setupData(filename,input$score))
}
# Show the table
output$savdat<-renderTable(outputdata)
})
}
shinyApp(ui, server)
Похожие вопросы
Новые вопросы
r
R - это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальные и воспроизводимые примеры вместе с желаемым результатом. Используйте dput () для данных и укажите все небазовые пакеты с вызовами library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. По вопросам, связанным со статистикой, используйте https://stats.stackexchange.com.