【问题标题】:Shiny: Apply code to input fileShiny:将代码应用于输入文件
【发布时间】:2026-02-20 02:40:01
【问题描述】:

我有一个简单的问题: 我有一个闪亮的小工具,可以检查 csv 文件中的一些规则。 在编写代码时,我使用特定的 csv 对其进行了测试。 但是如果用户要使用闪亮工具来验证他们的csv文件,代码必须检查闪亮工具中上传的文件的规则:

如何将输入文件作为变量存储在全局环境中,以便将代码单独应用于输入文件?

我的代码如下所示:

rm(list=ls())
source("vr_test.R")
library(shiny)

ui <- fluidPage(
titlePanel("xx"),

  sidebarLayout(
    sidebarPanel(
      helpText("xx"),

      fileInput("file", h3("File input")),

      actionButton("button", "auswerten")

      ),

    mainPanel(
      textOutput("result")

    )
  )
  )


server <- function(input, output) {

  observeEvent(input$button, {
    output$result <- renderText({ 
    print(eval(parse(text=Formula))) # "Formula" is defined in sourced "vr_test.R"
  })
  }) 
}


shinyApp(ui=ui,server=server)

提前致谢。

【问题讨论】:

    标签: r csv input shiny


    【解决方案1】:

    您不应将 csv 存储在全局环境中。最佳做法是将其设为reactive,并以此为基础进行测试。下面给出了一个示例,用于测试 csv 是否有足够的行(假设在这种情况下我们需要超过 5 行)。

    除了renderText,您还可以选择使用observeEvent,如果不满足条件,则显示modalDialog

    希望这会有所帮助!

    library(shiny)
    
    ui <- fluidPage(
      fileInput("file1", "Choose CSV File",
                accept = c(
                  "text/csv",
                  "text/comma-separated-values,text/plain",
                  ".csv")),
      tableOutput("contents"),
      textOutput(my_test)
    )
    
    server <- function(input, output) {
    
      # Load csv as reactive
      my_csv <- reactive({
        inFile <- input$file1
        if (is.null(inFile))
          return(NULL)
        df<- read.csv(inFile$datapath, header=T)
        return(df)
      })
    
      output$my_test <- renderText({
        validate(need(!is.null(my_csv()),'No csv uploaded.'))
    
        # perform test here
        if(nrow(my_csv())>5)
        {
          return('Your csv has enough rows!')
        }
        else
        {
          return('Your csv has not enough rows!')
        }
      })
    
    }
    
    shinyApp(ui, server)
    

    【讨论】:

    • 谢谢。对于我的项目,我需要处理输入数据——过滤、提取、替换、将数据存储为变量——让脚本(我在最近几周工作)运行输入数据。作为我的代码的结果,经过多次检查(应该在闪亮的应用程序中打印)后有很多逻辑值。一般来说,现在我必须“将我的代码转移到闪亮的世界”。我的计划能变成现实吗?感谢您的进一步帮助。
    • 是的,这当然是可能的。我建议你把你的计划分成几个小步骤;首先尝试过滤。如果有效,请继续提取。如果没有,请在 Stack Overflow 上将其作为一个单独的问题提出。并继续这样。祝你好运;)
    最近更新 更多