我正在尝试在Shiny中创建一个交互式应用程序。它看起来如下:
摘要:用户将带有HOUR和DEMAND的.csv文件添加为两个字段。要求进一步的用户选择单选按钮(根据下拉菜单中的选择进行更改)。正如现在可以看到的那样,选择是'500',它反映在图表中(绿色)。
我无法做到的事情:当用户进行另一次选择(比如'250')时,我想在图表中添加500 + 250。
问题:我需要以某种方式更新 eventReactive 函数中的反应式表达式 lastgang(),我认为这是不可能的。还有其他方法可以做到这一点。我是Rshiny的新手。任何指导将不胜感激。
以下是server.R和ui.R文件中的代码。
server.R
library(ggplot2)
library(shiny)
shinyServer(function(input, output) {
lastgang <- reactive({
if(is.null(input$file)){return()}
data = read.table(file=input$file$datapath, header =TRUE, sep=",")
data$source = rep(0, nrow(data))
data
})
db_source =read.table(file="example.csv", header = TRUE, sep = ",")
choice = as.character(db_source$Source.Typ)
choose1 = reactive({
if (is.null(input$engine)){return()}
subcat= character(0)
for (i in 1:nrow(db_source)){
if (input$engine == as.character(db_source$Source.Typ[i]))
{
#count = count +1
#subcat = c(subcat, paste(as.character(db_source$Produkt[i]),"(",as.character(db_source$kW.max[i]), "kW", ")"))
subcat = c(subcat, db_source$kW.max[i])
}
}
subcat
})
output$radio = renderUI({radioButtons("cp", "Select Capacity (kW)", choices = choose1()) })
db = eventReactive(input$update,
{
intermediate = rep(0, nrow(lastgang()))
temp = lastgang()
for ( i in 1:nrow(temp)){
if (temp$Demand[i] > as.numeric(input$cp) )
{
intermediate[i] = as.numeric(input$cp)
}
else {
intermediate[i] = temp$Demand[i]
}
}
temp$source = temp$source + intermediate
temp
})
output$plot <- renderPlot({
ggplot(db(), aes(x = Hour )) +
labs(title = "Supply and Demand")+
theme(plot.title = element_text(size=16, face="bold", vjust=2))+
geom_ribbon(aes(ymin=0, ymax=Demand), fill="red") +
geom_line(aes(y=Demand, colour="Demand")) +
geom_ribbon(aes(ymin=0, ymax=source), fill="green") +
geom_line(aes(y=source, colour="Supply") )+
scale_colour_manual(name='', values=c("Demand"="red", "Supply"="green"))
})
})
ui.R
library(shiny)
shinyUI(fluidPage(
titlePanel("Source Design"),
sidebarLayout(
sidebarPanel(
fileInput("file", label = h4("Select *.csv file")),
br(),
selectInput("engine", "Select the Source", choices = choice),
br(),
uiOutput('radio'),
actionButton("update", "Submit")
),
mainPanel(
plotOutput('plot'),
)
)
))
答案 0 :(得分:0)
我可能会误解这里的事情,但基于
当用户进行另一次选择(比如'250')时,我想在图表中显示500 + 250的添加。
我认为无线电选项可能不是您的最佳选择。
无线电选项的想法是只能选择一种替代方案。每次用户选择一个选项时,都会发生一些事情。如果您以某种方式存储旧值,那么每次用户与无线电选项交互时,您都会堆叠(在本例中为“add”)值。
也许你宁愿想要一个滑块呢?或带有建议的文字输入?