input - 通过文本输入(客户名称),我如何访问数据库并通过传单/闪亮/R(弹出)呈现他的所有信息
问题描述
我有一个由 5 列组织的数据库:client_name
、client id
、city
、latitude
和longitude
。
我想创建一个闪亮的应用程序,用户可以在其中选择一个客户id
,然后看到一个带有标记的地图,显示客户的位置并弹出他们的主要信息
下面的代码让用户选择一个客户端并显示一个地图,但地图总是出现在默认纬度和经度(45 和 3)处的标记。
library(shiny)
library(leaflet)
library(shinythemes)
ee <- read.csv(file="C:\\Shiny\\data\\comptes.csv",header=TRUE, sep=";", encoding="UTF-8")
LAT=45
LONG=3
shinyServer(function(input,output,session){
subset_data = reactive({
LAT= head(subset(ee,ee$client_id==input$client, select=c(Lat)),1)
LONG= head(subset(ee,ee$client_id==input$client, select=c(Long)),1)
return (LAT)
return (LONG)
})
#Carte vue d'ensemble
outpu$mymap=renderLeaflet({
leaflet() %>%
addTiles() %>%
addMarkers(lng=LONG, lat=LAT, popup="XXXX")
})
})
shinyUI(navbarPage("Title",
theme = shinytheme("united"),
tabPanel("Vue d'ensemble",
sidebarLayout(
sidebarPanel(
textInput("client","Votre id client")
),
mainPanel(
width=8,
leafletOutput('mymap')
)
)
)))
谢谢您的帮助 !
解决方案
您的问题是您永远不会返回并访问您更新LAT
的LONG
值。有两个问题:
首先,您只能从函数中返回一件事。在您的subset_data
函数中,当您的代码到达return(LAT)
时,它会返回该值并且永远不会到达return(LONG)
. 如果你想从一个函数返回 2 个值,你应该把它们变成一个列表或向量并返回:
subset_data = reactive({
LAT= head(subset(ee,ee$client_id==input$client, select=c(Lat)),1)
LONG= head(subset(ee,ee$client_id==input$client, select=c(Long)),1)
return(c('LAT' = LAT, 'LONG' = LONG)))
})
其次,您没有正确访问您的反应式表达。LAT
并且LONG
是一开始就设置的,永远不会改变。该subset_data
函数永远不会运行,即使它运行过,它也不会更改全局变量LAT
和LONG
. 使用reactive
表达式的方式是在需要访问它们的值时调用它们。
在这种情况下,当您想要获取 and 的值时LAT
,LONG
您调用该subset_data
函数然后检查它所依赖的输入是否已更改并返回其值。由于该值是一个命名向量,因此您可以使用双括号表示法访问所需的值[[]]
:
output$mymap <- renderLeaflet({
leaflet() %>%
addTiles() %>%
addMarkers(lng=subset_data()[['LONG']], lat=subset_data()[['LAT']], popup="XXXX")
})
推荐阅读
- apache-spark - Hive 查询以根据条件获取计数
- python - 如果值为 NaN 但维护数据框中的其余数据,python 中是否有任何函数可以擦除特定列
- javascript - 使用 JavaScript 的表单验证不适用于 PHP
- google-apps-script - 将信息从 Google 表单自动填充到表格
- offline - 如何在 Suse12 SP3 上离线安装 kubeadm kubelet kubectl
- python - 正则表达式 - 无法在 ' 之后提取单词
- android - Android:如何让我的应用程序从广播接收器和警报在屏幕上打开
- swift - CloudKit:不在属性初始化器中使用实例成员“谓词”;属性初始化程序在“自我”可用之前运行
- c# - 使用 Google API 在服务器端获取用户信息
- security - 刷新令牌轮换 - 真的足够了吗?