R Shiny - 使用 csv 中的数据和用户 numericInput 进行计算
Posted
技术标签:
【中文标题】R Shiny - 使用 csv 中的数据和用户 numericInput 进行计算【英文标题】:R Shiny - calculation using data in csv and user numericInput 【发布时间】:2021-10-29 14:30:50 【问题描述】:我正在尝试创建一个闪亮的应用程序,用户可以在其中上传 csv 文件,输入数值,将数值添加到 csv 中的特定数据列,然后将原始 + 计算数据保存在表格中。我使用一个简单的 csv 文件在下面生成了一个简化的 Shiny 脚本。
当我尝试运行应用程序时,我收到错误:
mutate()
输入 sum
存在问题。
[31mx[39m 二元运算符的非数字参数
[34mi[39m 输入sum
是A + C
。
我尝试查找一些如何解决此问题的示例,但无法找到利用 eventReactive() 来使用新计算的数据更新数据表的内容。非常感谢任何帮助。
图书馆(闪亮) 库(dplyr)
ui
# Application title
titlePanel("Test"),
# Show a plot of the generated distribution
mainPanel(
fileInput(
inputId = "csvFile",
label = "Upload csv file",
accept = c(".csv")),
uiOutput("C"),
uiOutput("D"),
tableOutput("modifiedData")
)
)
服务器
output$C <- renderUI(
numericInput("C", "Variable C", 0)
)
output$D <- renderUI(
numericInput("D", "Variable D", 0)
)
userData <- eventReactive(input$csvFile,
req(input$csvFile)
raw_df <- read.csv(input$csvFile$datapath)
calc_df <- raw_df %>%
mutate(sum = A + C)
)
output$modifiedData <- renderTable(userData())
shinyApp(ui = ui, server = server)
【问题讨论】:
您的意思是要将作为单个数值的C
添加到A
列的所有6 行吗?在这种情况下,您需要mutate(sum = A + input$C)
【参考方案1】:
您应该使用反应变量input$C
。此外,您应该使eventReactive
依赖于input$C
。试试这个
ui <- fluidPage(
# Application title
titlePanel("Test"),
# Show a plot of the generated distribution
mainPanel(
fileInput(
inputId = "csvFile",
label = "Upload csv file",
accept = c(".csv")),
uiOutput("C"),
uiOutput("D"),
tableOutput("modifiedData")
)
)
server <- function(input, output)
output$C <- renderUI(
numericInput("C", "Variable C", 0)
)
output$D <- renderUI(
numericInput("D", "Variable D", 0)
)
userData <- eventReactive(list(input$csvFile, input$C),
req(input$csvFile)
raw_df <- read.csv(input$csvFile$datapath)
calc_df <- raw_df %>%
mutate(sum = A + input$C)
)
output$modifiedData <- renderTable(userData())
shinyApp(ui = ui, server = server)
【讨论】:
以上是关于R Shiny - 使用 csv 中的数据和用户 numericInput 进行计算的主要内容,如果未能解决你的问题,请参考以下文章
Shiny App - 从上传的 CSV 生成和下载 PPTX 幻灯片