如何使用 Shiny 在 readORG 中使用 textInput 作为图层名称

Posted

技术标签:

【中文标题】如何使用 Shiny 在 readORG 中使用 textInput 作为图层名称【英文标题】:How to use textInput as layer name in readORG using Shiny 【发布时间】:2017-06-16 06:11:26 【问题描述】:

我想使用以下命令来读取形状文件:readOGR(infile$datapath,input$text1),其中 input$text1 来自 ui.R 中定义的 Shiny textInput。我该怎么做?

Minimal Code:
library(shiny)
library(caret)
library(sp)            
library(rgdal)         
library(raster)
library(rgeos)
library(ggplot2)
library(RStoolbox)

setwd("C:/Users/User1/MyTestData")

shinyApp(
  ui = fluidPage(
    navbarPage(
      "Example",
      tabPanel("Option1",

               sidebarPanel(
                 textInput("testfile1", "Input Test File","test_file"),
                 verbatimTextOutput("value1")
               )
      )
    )
  ),
  server <- function (input, output, session)
    # Load specified file
    filedata1 <- reactive(
      infile1 <- input$FileInput
      if (is.null(infile1)) 
        # No upload
        return(NULL)
      
      myfile <- readOGR(infile1$datapath, infile1$name) # <-this doesn't work??
      #myfile <- readOGR(dirname(infile1$datapath), infile1$name)
    )

错误信息: .local(x, y, ...) 中的错误:无法从参数 y 获取 Extent 对象

【问题讨论】:

我收到错误:无法将类型“闭包”强制转换为“字符”类型的向量” 我尝试改进代码,但现在收到不同的错误消息: 这里是最小代码: 请查看修改后问题中的最小代码。谢谢! 【参考方案1】:

这是一个最小示例,当您在 textInput 中输入名称(不包括“.shp”扩展名)时,它会在“MyTestData”文件夹中绘制一个形状文件:

library(shiny)   
library(rgdal)   
library(ggplot2)   
library(sp)            

shinyApp(
  ui = fluidPage(
    textInput("FileInput", "Input Test File"),
    plotOutput("map")),
  server <- function (input, output, session)
    # Load specified file
    filedata <- reactive(
      infile <- input$FileInput
      if (!is.null(infile) && infile!="") 
        readOGR("C:/Users/User1/MyTestData", infile) 
    )
    output$map <- renderPlot(
      data <- filedata();
      if(!is.null(data))
        plot(data))
  )

【讨论】:

感谢 HubertL。不能使用datapath来指定目录吗?我想避免每次目录更改时手动更改路径。最后,难道不能将 readORG 的输出赋值给一个变量吗?原因是我想使用 readORG 输出执行裁剪等操作。如果我能解决这两个问题,问题就解决了。 您可以分配给一个变量并在响应式中修改 readOGR 的结果,或者使用 renderPlot 中的数据对象。形状文件将位于闪亮的服务器中,因此请将它们放在应用程序的子文件夹中,例如 shapes 并在 readOGR 中使用该子文件夹。 感谢您的解决方案!我会做修改。

以上是关于如何使用 Shiny 在 readORG 中使用 textInput 作为图层名称的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Shiny 中使用 textInput 来命名上传数据框的列

如何使用 DT、R 和 Shiny 在表格的单元格中嵌入图像

如何在 Shiny 中使用 DataTable Extensions 更改下载文件中的名称?

如何使用操作按钮在 R Shiny 中显示和隐藏表格输出?

如何在 r shiny 中使用 JS 数据表 API?

在R Shiny中如何分离滑块输入值并使用它们进行过滤