首页 > 解决方案 > 如何在shinyR中使用R中的算术表达式来改变数据集

问题描述

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

但我做不到,结果是打印公式。感谢是否有人可以调查该问题并提出解决方案。

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))

标签: rshinydplyr

解决方案


可以通过使用来更改代码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))

在此处输入图像描述


推荐阅读