【问题标题】:How to use textInput as layer name in readORG using Shiny如何使用 Shiny 在 readORG 中使用 textInput 作为图层名称
【发布时间】: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 对象

【问题讨论】:

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

标签: shiny


【解决方案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 中使用该子文件夹。
  • 感谢您的解决方案!我会做修改。
猜你喜欢
  • 2021-04-26
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
  • 2018-09-18
  • 2021-04-17
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多