Как преобразовать набор данных с помощью арифметического выражения в R в brightR - PullRequest
0 голосов
/ 03 сентября 2018

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

Но я не могу этого сделать, и результат - печать формулы. Благодарим вас за то, что кто-нибудь может разобраться в проблеме и предложить решение.

library(shiny)
library(plyr)
library(dplyr)
library(DT)
library(data.table)

 ui <- pageWithSidebar(
    headerPanel = headerPanel('data'),
    sidebarPanel = sidebarPanel(#         fileInput(
            #         'mtcars', h4('Uplaodmtcardata in csv format')
            # ),
            uiOutput('formula')),
    mainPanel(dataTableOutput("data"))
)

server <- function(input, output, session) {
    mtcarsFile <- reactive({
            input$mtcars
    })


    xxmtcars <-
            reactive({
                    as.data.table(mtcars)
            })



    output$formula <- renderUI({
            textInput('formula',
                      h5('formula'))

    })
    formulaPars <- reactive({
            !!(input$formula)
    })

    newCol  = reactive({
            quo(formulaPars())
    })

    output$data <- renderDataTable({
            as.data.table(mutate(xxmtcars(), cyl + (!!newCol())))


    })

}

 runApp(list(ui = ui, server = server))

1 Ответ

0 голосов
/ 04 сентября 2018

Код можно изменить следующим образом, используя rlang::parse_expr() для получения желаемого результата:

server <- function(input, output, session) {

  mtcarsFile <- reactive({
    input$mtcars
  })

  xxmtcars <-
    reactive({
      if (!is.null(input$mtcars)) {
        as.data.table(read.csv(input$mtcars$datapath))
      } 
  })

  output$formula <- renderUI({
    textInput('formula',  h5('formula'))

  })

  formulaPars <- reactive({
    (input$formula)
  })

  newCol  = reactive({
    formula = formulaPars()
    if (formula != '') {
      rlang::parse_expr(formula)
    }
  })

  output$data <- renderDataTable({
    data <- xxmtcars()
    if (!is.null(data) && input$formula != '') {
      as.data.table(mutate(data , cyl + !!newCol()))
    }
  })  
}

runApp(list(ui = ui, server = server))

enter image description here

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