试图用我的数据框和过滤器创建像这样的one这样的地图,我发现传单没有反映任何长篇幅。或拉特因此没有弹出窗口显示。dataset和css
代码
<form action="{{route('user.update', Auth::user()->id)}}" method="POST">
附加了我在应用程序中使用过的CSS,以及所有必需的data。如果我删除了
library(shiny)
library(dplyr)
library(leaflet)
library(readr)
CBdata <- read_csv("/cloud/project/TESTLEAF/www/cblnglt.csv")
df0<- data.frame("cho"=c("No schooling completed","vocational","Bachelor","Post Graduate ","Single","Married","Divorced","others","male","female","under_20","21_30","31_39","31_40","41_50","51_59","over_60","Retired","Public_Employee","Private_Employee","Self_employeed","Unemployed","Others"),
"cat"=c("educ.","educ.","educ.","educ.","Relationship.Status","Relationship.Status","Relationship.Status","Relationship.Status","by_gender","by_gender","By_age","By_age","By_age","By_age","By_age","By_age","By_age","profession","profession","profession","profession","profession","profession"))
CBdata2<-as.data.frame(CBdata)
ui<-
navbarPage("Mapping Dashboard",
theme = "bootstrap.css",
tabPanel("tbd",
div(class="outer",
leafletOutput("mymap", width = "100%", height = "100%"), #
absolutePanel(id = "controls", class = "panel panel-default",
fixed = TRUE,draggable = TRUE, top = "10%", left = "auto", right = 20, bottom = "auto",
width = 330, height = "auto", cursor = "move",br(),
selectInput("region", "Which governorate?", unique(CBdata$by_gov), selected = "Mumbai"),
selectInput("variable", "Filter by?", unique(df0$cat), selected = "by_gender"),
selectInput("sndvariable","sub filter",choices =NULL),
selectInput("indicator","select Indicator",c("xyz","abc"),
selected = "abc"),
plotOutput("bar", height = "250px"),
))),
tabPanel("By Product"))
server<-function(input,output,session){
observe({
TX<-df0%>%filter(cat==input$variable)%>%select(cho)
updateSelectInput(session,"sndvariable","sub filter",choices = unique(TX))
})
CBD1<-reactive({
#browser
CBdata2%>%
filter(input$variable==input$sndvariable,by_gov==input$region)%>%
group_by(lng,lat,input$variable,by_gov,input$indicator)%>%
arrange(desc(input$indicator)) %>%
select(lng,lat,input$variable,by_gov,input$indicator)
})
CBD2<-reactive({
#browser
summarize(CBD1(),summation=sum(as.integer(input$indicator)))
})
CBD3<-reactive({as.data.frame(CBD2())
})
output$mymap<-renderLeaflet({
CBD3()%>%leaflet()%>%
addProviderTiles(provider = "CartoDB.DarkMatter")%>%
addCircleMarkers(lng=~lng,lat=~lat)
})
}
shinyApp(ui,server)
并插入了实际值,它可以正常工作,但是当我们使用数据框时会出现问题。
预先感谢
答案 0 :(得分:2)
您的问题是您的输入例如input$variable
返回文本。但是,您希望dplyr
之类的filter
函数使用这些输入,就像它们是数据集中的变量一样,而不是文本。
例如:
# this fails because input_filter is a character vector and not a variable
my_filt_wrong <- function(data, input_filter, cond){
data %>%
filter(input_filter == cond)
}
my_filt_wrong(iris, 'Species', 'setosa')
#[1] Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#<0 rows> (or 0-length row.names)
# this works because we tell r to evaluate the input text as a variable
my_filt <- function(data, input_filter, cond){
data %>%
filter(!!sym(input_filter) == cond)
}
my_filt(iris, 'Species', 'setosa')
## A tibble: 50 x 5
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# <dbl> <dbl> <dbl> <dbl> <fct>
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5 3.6 1.4 0.2 setosa
如果我们要在数据集中引用变量的地方将input$...
替换为!!sym(input$...)
,则地图现在应该可以工作了。
library(shiny)
library(dplyr)
library(leaflet)
library(readr)
CBdata <- read_csv("~/downloads/cblnglt.csv")
df0<- data.frame("cho"=c("No schooling completed","vocational","Bachelor","Post Graduate ","Single","Married","Divorced","others","male","female","under_20","21_30","31_39","31_40","41_50","51_59","over_60","Retired","Public_Employee","Private_Employee","Self_employeed","Unemployed","Others"),
"cat"=c("educ.","educ.","educ.","educ.","Relationship.Status","Relationship.Status","Relationship.Status","Relationship.Status","by_gender","by_gender","By_age","By_age","By_age","By_age","By_age","By_age","By_age","profession","profession","profession","profession","profession","profession"))
CBdata2<-as.data.frame(CBdata)
ui<-
navbarPage("Mapping Dashboard",
theme = "bootstrap.css",
tabPanel("tbd",
div( class= 'outer',
leafletOutput("mymap", width = "100%", height = "100%"),
absolutePanel(id = "controls", class = "panel panel-default",
fixed = TRUE,draggable = TRUE, top = "10%", left = "auto", right = 20, bottom = "auto",
width = 330, height = "auto", cursor = "move",br(),
selectInput("region", "Which governorate?", unique(CBdata$by_gov), selected = "Mumbai"),
selectInput("variable", "Filter by?", unique(df0$cat), selected = "by_gender"),
selectInput("sndvariable","sub filter",choices =NULL),
selectInput("indicator","select Indicator",c("xyz","abc"),
selected = "abc"),
plotOutput("bar", height = "250px")
)
)),
tabPanel("By Product",
tableOutput('mytable'))
)
server<-function(input,output,session){
observe({
TX<-df0 %>% filter(cat==input$variable)%>%select(cho)
updateSelectInput(session,"sndvariable","sub filter",choices = unique(TX))
})
CBD1<-reactive({
#browser
CBdata2 %>%
filter(!!sym(input$variable)==input$sndvariable,by_gov==input$region) %>%
group_by(lng,lat,!!sym(input$variable),by_gov,!!sym(input$indicator))%>%
arrange(desc(!!sym(input$indicator)))
})
CBD2<-reactive({
#browser
summarize(CBD1(), summation = sum(as.integer(!!sym(input$indicator))))
})
output$mytable <- renderTable(
CBD2()
)
output$mymap<-renderLeaflet({
CBD2() %>%
leaflet()%>%
addProviderTiles(provider = "CartoDB.DarkMatter")%>%
addCircleMarkers(lng=~lng, lat=~lat)
})
}
shinyApp(ui,server)