如何使用 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 在表格的单元格中嵌入图像