有多个问题。
我从数据库中得到一个data.frame
,并且我正在尝试创建一个R Shiny Web App,可以在其中从两个下拉菜单中进行选择(基于我data.frame
中行和列的组合值),将这些变量传递给图]
假设我的数据框中有此数据:
# |User|N00 |Percentage|N01 | |----|------|----------|----| |35 |2229 | 4.46830 |918 | |37 |153 | 0.00307 |0 | |39 |1557 | 0.03120 |0 | |41 |4997 | 0.10014 |0 | |42 |1 | 0.00002 |0 | |44 |12221 | 0.24490 |0 | |46 |5 | 0.00010 |0 | |50 |342 | 0.00685 |0 | |51 |123 | 0.00246 |0 | |56 |2 | 0.00004 |1 | |57 |0 | 0.00000 |0 | |60 |62275 |1.24796 |2799|
[我想做的是在“用户”列中有一个下拉菜单,在“标题”中有第二个下拉菜单,因此我可以选择“用户”和“标题”,然后返回适当的结果(data.frame)。] >
所以我需要从两个下拉列表的组合中进行如下操作:
select(data_to_choose_from, User, values)[data_to_choose_from$id==values2, ]
其中value是第一个下拉菜单(用户)的结果,values2是第二个下拉菜单(标题)的结果,如下所示:
因此,当我选择用户“ 35”和列“ N00”时,我想获得此结果:
|User|N00 | |----|------| |35 |2229 |
我得到此结果后,我想将“ N00”列中的数字传递给某个变量,并使用该数字创建量规,例如看起来像这样(这只是示例,我必须对其进行调整更多“清晰”):
我有这个:
library(shiny) #Load libraries library(plotly) #Load libraries data_to_choose_from <- data.frame(a) #Assign data from data.frame(a), which is data i have from my DB to new variable ui <- fluidPage( sidebarLayout( sidebarPanel( selectizeInput("User", "User", choices=NULL, selected=NULL), #First dropdown selectizeInput("Metrics", "Metrics", choices=NULL, selected=NULL), #Second dropdown textOutput("values"), #Show what did i choose in the first dropdown textOutput("values2"), #Show what did i choose in the second dropdown tableOutput("table") #Output tha table based on my choices in dropdowns ), mainPanel( plotlyOutput('p') #Plot a visualization base on data from output table ) ) ) server <- function(input, output, session) { #First dropdown, reference to my data.frame updateSelectizeInput(session, 'User', choices = data_to_choose_from$User, server = TRUE ) updateSelectizeInput(session, 'Metrics', choices = names(data_to_choose_from), #Second dropdown, reference to my data.frame server = TRUE ) output$values <- renderText({(input$User)}) #Output of first dropdown output$values2 <- renderText({(input$Metrics)}) #Output of second dropdown output$values3 <- as.vector(select(data_to_choose_from, values)[data_to_choose_from$id==values2, ]) #Put this as vector to plot_ly output$table <- select(data_to_choose_from, id, values)[data_to_choose_from$id==values2, ] #Filtered data.frame output based on original data output$plot <- renderPlotly( #Here i would like to create the plot to render in mainpanel p <- plot_ly( type = "indicator", mode = "gauge+number+delta", value = i, title = list(text = values2, font = list(size = 24)), delta = list(reference = 400, increasing = list(color = "RebeccaPurple")), gauge = list( axis = list(range = list(NULL, 500), tickwidth = 1, tickcolor = "darkblue"), bar = list(color = "darkblue"), bgcolor = "white", borderwidth = 2, bordercolor = "gray", steps = list( list(range = c(0, values3), color = "cyan"), list(range = c(values3, 400), color = "royalblue")), threshold = list( line = list(color = "red", width = 4), thickness = 0.75, value = values3 + 100))) %>% layout( margin = list(l=20,r=30), paper_bgcolor = "lavender", font = list(color = "darkblue", family = "Arial"))) } shinyApp(ui, server)
不幸的是,这不起作用,我想我的代码从头开始是错误的,我尝试遵循文档,但我有点迷茫。。
我正在尝试学习R,并且我对一般情况下变量和Shiny R的工作方式感到困惑,如果有任何不清楚的地方,请帮助我了解我的所有信息将大为有用。将编辑我的问题,谢谢
我有一个来自数据库的data.frame,并且我正在尝试创建一个R Shiny Web App,我可以在其中从两个下拉菜单中进行选择(基于data.frame中行和列的组合值)。 ..
有多个问题。
[执行output$values <- renderSomething({......})
时,无法通过调用......
来访问values
(甚至无法调用output$values
)。
用[替换output$values3
values3 <- reactive({ req(input$User, input$Metrics) data_to_choose_from[data_to_choose_from$User == input$User, input$Metrics] })
现在您可以通过调用
values3
获得values3()
的值。因此,将values3
中的renderPlotly
替换为values3()
。并将text = values2
替换为text = input$Metrics
。
req(input$User, input$Metrics)
行表示input$User
和input$Metrics
必须可用。这样可以避免启动应用程序时出错,因为这些变量仅在updateSelectizeInput
动作后才可用。如果要渲染表,请使用
renderTable
:
output$table <- renderTable({ req(input$User, input$Metrics) subset(data_to_choose_from, User == input$User, select = c("User", input$Metrics)) })
您执行
output$plot <- renderPlotly({ p <- plot_ly(.......) })
,因此在ui
中应为plotlyOutput("plot")
,而不是plotlyOutput("p")
。p <-
没有用,您可以将其删除。现在在
plot_ly
中执行value = i
,但未定义i
。我不知道您打算做什么(我对这种情节不熟悉)。
有多个问题。