如何在ShinyR中使用R中的算术表达式对数据集进行变异

时间:2018-09-03 14:47:01

标签: r shiny dplyr

我正在尝试创建一个闪亮的应用程序,该程序接受公式作为输入参数,并相应地更改文件。

但是我无法做到这一点,结果是公式的打印枯萎了。感谢是否有人可以调查该问题并提出解决方案。

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 :(得分:1)

可以使用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