我遇到了另一个问题,我显然无法自己解决。
我正在寻找一种通过无线电按钮或类似方式选择传递矢量的方法。
if(!require(shiny)){
install.packages("shiny")
require(shiny)
}
if(!require(tidyverse)){
install.packages("tidyverse")
require(tidyverse)
}
if(!require(lubridate)){
install.packages("lubridate")
require(lubridate)
}
prodpromonat <- tibble(prodmonat= as.Date(c("2008-11-01", "2008-12-01", "2009-01-01", "2009-02-01", "2009-03-01")), n = c(1769, 3248, 3257, 2923, 3260))
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fluidRow(
sliderInput(
"zeitraum",
"Produktionszeitraum",
min = min(prodpromonat$prodmonat),
max = max(prodpromonat$prodmonat),
value = c(max(prodpromonat$prodmonat)-30, max(prodpromonat$prodmonat))
)
),
fluidRow(
radioButtons(
"farbe",
"Farbschema",
choices = c("grau", "rot-grün", "blau-grau", "schwarz-weiß"),
selected = "grau"
)
)
),
mainPanel(
tabPanel(
title = "produktion" ,
plotOutput(
outputId = "produktionsmenge"
)
)
)))
server <- function(input, output, session){
farbeninput <- reactive({
switch(input$farbe,
"grau" = c("#808080", "#808080"),
"rot-grün" = c("#B22222", "#006400"),
"blau-grau" = c("#1E90FF", "#696969"),
"schwarz-weiß" = c("#000000", "FFFFF0")
)
})
data <- reactive({
df <- filter_produktionsmenge()
})
filter_produktionsmenge <- reactive({
min <- filter(prodpromonat, prodmonat >= floor_date(input$zeitraum[1], "month"))
max <- filter(prodpromonat, prodmonat <= floor_date(input$zeitraum[2], "month"))
semi_join(min, max, by = "prodmonat")
})
output$produktionsmenge <- renderPlot({
ggplot(data(), aes(prodmonat, n)) +
geom_bar(stat="identity", aes(fill = factor(as.numeric(month(prodmonat) %% 2 == 0)))) +
scale_fill_manual(values=rep(c("#000000", "#008080"))) +
xlab("Produktionsmonat") +
ylab("Anzahl produzierter Karosserien") +
theme(legend.position = "none")
})
}
shinyApp(ui, server)
所以我基本上想要用scale_fill_manual
值替换由radiobuttons转发的向量。
我试图将矢量直接分配给无线电按钮输入,但无法正常工作。
然后我提出了使用开关盒的想法。但是,当通过无功开关输入替换scale_fill_manual
中的向量时,它会显示错误“尝试复制'闭合'类型的对象'”。我不确定,这个错误来自哪里以及如何避免它。希望你能帮忙吗?
我希望你原谅我没有翻译代码中的德语单词和缩写:)