Добавление реактивных значений в фрейм данных - Rshiny - PullRequest
0 голосов
/ 15 октября 2019

В данный момент я пытаюсь сделать следующее: импортировать файл в 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 Ответ

0 голосов
/ 15 октября 2019

Похоже, вы хотите, чтобы реактивность происходила каждый раз, когда вы нажимаете кнопку «Следующий файл». Я переписал ваш код, чтобы он отвечал только один раз, используя «ObserveEvent», каждый раз при нажатии кнопки «Следующий файл». 2-й вызов - сохранение значений при каждом реактивном событии. Хотя есть несколько способов справиться с этим, я выбрал подходящую технику - оператор присваивания «<< -», чтобы позволить переменным «выходные данные» сохраняться (это, как правило, не очень хорошая методика программирования). Поскольку переменная «outputdata» существует во всех средах, вам нужно будет стирать свою среду каждый раз, когда вы хотите запустить эту программу. </p>

Вот мое переписывание с использованием того же пользовательского интерфейса, который вы создали:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...