Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在闪亮的应用程序中上载文件,并通过textInput()设置其名称_R_Shiny - Fatal编程技术网

R 在闪亮的应用程序中上载文件,并通过textInput()设置其名称

R 在闪亮的应用程序中上载文件,并通过textInput()设置其名称,r,shiny,R,Shiny,下面我有一个简单的闪亮应用程序。在此应用程序中,我希望用户能够上传自己的csv,然后自动将其添加为另一个数据集“D.B”(我在原始应用程序中创建)下方复选框组中的选项。我是通过使用一个观察者和一个反应列表来实现的,在这个列表中我输入了文件名。新文件最初将具有其默认名称,但用户可以使用“Set Filename”textInput()将其更改为自己选择的名称。然后,当用户选择一个文件时,它将显示为一个表。问题是我遗漏了一些东西,当我添加第二个文件时,第一个文件变成NA,并且没有显示任何表格 #ui

下面我有一个简单的闪亮应用程序。在此应用程序中,我希望用户能够上传自己的csv,然后自动将其添加为另一个数据集“D.B”(我在原始应用程序中创建)下方复选框组中的选项。我是通过使用一个观察者和一个反应列表来实现的,在这个列表中我输入了文件名。新文件最初将具有其默认名称,但用户可以使用“Set Filename”textInput()将其更改为自己选择的名称。然后,当用户选择一个文件时,它将显示为一个表。问题是我遗漏了一些东西,当我添加第二个文件时,第一个文件变成NA,并且没有显示任何表格

#ui.r
library(shiny)
library(rlist)
# Define UI for data upload app ----
ui <- fluidPage(

  # App title ----
  titlePanel("Uploading Files"),

  # Sidebar layout with input and output definitions ----
  sidebarLayout(

    # Sidebar panel for inputs ----
    sidebarPanel(

      # Input: Select a file ----
      fileInput("file1", "Choose CSV File",
                multiple = FALSE,
                accept = c("text/csv",
                           "text/comma-separated-values,text/plain",
                           ".csv")),
      uiOutput("checkbox"),
      uiOutput("text")

    ),

    # Main panel for displaying outputs ----
    mainPanel(

      # Output: Data file ----
      tableOutput("contents")

    )

  )
)
#server.r
server <- function(input, output) {
  output$text<-renderUI({
  textInput("filename","Set Filename",value = "Set Name")
  })
  New <- reactive({
    req(input$file1)
    df <- read.csv(input$file1$datapath)

  })

  D.B <- reactive({
    if("D.B"%in% input$datasetSelector){
    x <- read.csv("something.csv", stringsAsFactors = F)
    }
  })

  fileOptions <- reactiveValues(currentOptions=c("D.B."))

  observeEvent(input$file1, {
    fileOptions$currentOptions = list.append(fileOptions$currentOptions, "New")
  })
  output$checkbox<-renderUI({
    if(length(fileOptions$currentOptions)==1){
    checkboxGroupInput("datasetSelector","Specify the datasets to compare:", choices = fileOptions$currentOptions[[1]]
    )}
    else{
    names(fileOptions$currentOptions)[[2]]<-input$filename  
    checkboxGroupInput("datasetSelector","Specify the datasets to compare:", choices = fileOptions$currentOptions
   )}
  })
  output$contents <- renderTable({
    input$dataSelector
  })


}
#ui.r
图书馆(闪亮)
图书馆(rlist)
#定义数据上传应用程序的用户界面----

ui我必须彻底检修服务器和ui,以使用内置的闪亮功能使这变得更容易。这么说来,这是你想要的一切。请注意,我没有在这里显示任何制表或数据处理,只是文件重命名和上载

# Define UI for data upload app ----
ui <- fluidPage(

  # App title ----
  titlePanel("Uploading Files"),

   # Sidebar layout with input and output definitions ----
  sidebarLayout(

    # Sidebar panel for inputs ----
    sidebarPanel(

       # Input: Select a file ----
       fileInput("file1", "Choose CSV File",
                multiple = FALSE,
                accept = c("text/csv",
                       "text/comma-separated-values,text/plain",
                       ".csv")),
      checkboxGroupInput("datasetSelector","Data Files", choices=c("D.B")),
      textInput("filename","Set Filename",value = "Set Name")

    ),

    # Main panel for displaying outputs ----
      mainPanel(

      # Output: Data file ----
      tableOutput("contents")

    ) 
  )
)
#server.r
server <- function(input, output, session) {

  observeEvent(input$filename, {

  req(input$file1)
  Name<-input$filename
  updateCheckboxGroupInput(session,"datasetSelector", choices=c("D.B",Name))
  })

  observeEvent(input$file1, {

    Data<-input$file1$datapath
    Name<-input$filename
    New <- read.csv(Data)
    updateCheckboxGroupInput(session,"datasetSelector", 
      choices=c("D.B",input$file1$name))
  })

  #Data proccesing code 
}
注意,我们还将复选框的输出放在observeEvent下,因此,除非在部署时为复选框设置选定值,否则任何表都不会初始化。我不确定您希望如何显示这两个表,因此需要做一些工作,但只需在if/语句和复选框的observeEvent中工作即可


程序知道何时选中这两个复选框,并列出两个文件/数据,但我不确定您打算如何显示这些文件/数据。不过,您可能希望将该工作包含在
if(L_Sel==2){..}
部分。

据我所知,该应用程序无法存储多个文件。上传一个文件后,它将被指定为“file1”,如果要上传另一个文件,它将覆盖“file1”。这是预期的结果吗?如中所示,您是否只想显示“D.B”和所选的任何文件?虽然我现在无法尝试并提出具体的潜在解决方案,但建议您查看
shinyFiles
,这可能会解决一半问题。该文件还应显示为表。作为一个文件名.Tnx,以获取您的详细答案,但我如何使用我上载的文件并将其显示为表格?不幸的是,如果我不能使用表格,我就不能使用此方法。@firmo23您找到表格了吗?我正在制定一个解决方案,但如果您有办法,请毫不犹豫地在此处共享。您是否可能提供此解决方案对于6个默认数据集,而不是一个??我想那可能有用
#Data Processing Code
observeEvent(input$datasetSelector, {

  #Constant
  D.B<- read.csv("somthing.csv", stringsAsFactors = F)

  Selected<-input$datasetSelector
  L_Sel<-length(Selected)

  if(L_Sel==2){
    Data<-read.csv(input$file1$datapath)
    dataSelector<-list(Data,D.B)
    print("A")
  }else if(Selected=="D.B"){
    dataSelector<-D.B
    print("B")
  }else if(Selected==input$file1$name|Selected==input$filename){
    Data<-read.csv(input$file1$datapath)
    dataSelector<-Data
    print(Data)
    print("C")
  }else{
    dataSelector=NA
  }

  output$contents<-renderTable({
    dataSelector
  })

  })