Реактивные данные, преобразование и перезапись - PullRequest
0 голосов
/ 28 сентября 2018

Я довольно новичок в R Shiny, и у меня возникли некоторые проблемы с реактивными наборами данных.

Моя идея состоит в том, чтобы загрузить набор данных, выполнить некоторые вычисления, распечатать результат.Это не проблема, если я установил набор данных как

df <- reactive({data.frame(mtcars)}) df_transformed <- reactive({data.frame(tapply(mt$hp, mt$cyl, mean), names(tapply(mt$hp, mt$cyl, mean))))}

, но теперь я не могу перезаписать исходный набор данных осмысленным образом.Я немного искал переполнение стека и нашел только то, как решить одну из этих двух проблем, которые как бы исключили друг друга.

Я бы хотел что-то подобное, но работало:

 server <- function(input, output) {

  vals <- reactiveValues()

  ## Create a reactive value dataset
  vals$mt <- data.frame(mtcars)

  ## Create a transformed set out of it


  vals$mt_transformed <- data.frame(tapply(mt$hp, vals$mt$cyl, mean),
                                    names(tapply(vals$mt$hp, vals$mt$cyl, mean)))

  names(vals$mt_transformed) <- c("hp", "cyl")

  ## Transform the initial dataset, via deleting the last row
  observeEvent(input$delete, {
    vals$mt <- vals$mt[-nrow(vals$mt),]
    })

  ## lets hope the plot changes everytime I delete a car
  output$plot <- renderPlot({
    ggplot(vals$mt_transformed) +
      geom_bar(
        aes(x = cyl, y = hp ),
        stat = "identity"
      )
  })
  # 

}

и для полноты:

library(shiny)
library(ggplot2)
ui <- fluidPage(
  actionButton(inputId = "delete", label = "destroy car"),
  plotOutput("plot")

   )

Заранее спасибо, Маркус

1 Ответ

0 голосов
/ 01 октября 2018

заставил его работать сам.

server <- function(input, output) {

  vals <- reactiveValues()

  ## Create a reactive value dataset 
  vals$mt <- data.frame(mtcars)

  ## Create a transformed set out of it

  mt_transformed <- reactive({
          df <- vals$mt
          mt_transformed <- data.frame(tapply(df$hp, df$cyl, mean),
                  names(tapply(df$hp, df$cyl, mean)))
          names(mt_transformed) <- c("hp", "cyl")
          return( mt_transformed)
        })

  ## Transform the initial dataset, via deleting the last row
  observeEvent(input$delete, {
    vals$mt <- vals$mt[-nrow(vals$mt),]
    })

  ## lets hope the plot changes everytime I delete a car
  output$plot <- renderPlot({
    ggplot(mt_transformed()) +
      geom_bar( aes(x = cyl, y = hp ), stat = "identity" )
    }) 

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...