r - 如何在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))
解决方案
可以通过使用来更改代码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))
推荐阅读
- javascript - Vue.js 中的国际化使用 vue-i18n 从 API 服务器获取 JSON 对象
- c# - 子弹摧毁 2 游戏对象意图一统一 2D
- sql - SQL 更新语句
- javascript - 如何禁用 contenteditable div 内的文本拖动?
- ruby-on-rails - 查看关联记录中存在的所有记录
- node.js - 猫鼬中的 findOneAndUpdate 与 $inc 第一次失败然后在下一次尝试中工作
- python - TypeError:不能在类似字符串的对象上使用字节模式
- r - 如何使这个循环更快
- android - 在导航堆栈中进一步导航时,android 上缺少汉堡按钮
- python - 检查具有全局权限的用户的对象权限