我正試圖構建一個閃亮的儀表板,其中包含圖表下的DT Package的HTML5 DataTable。圖表連接到DataTable,以便過濾DataTable將過濾圖表。當使用Shiny&DT DataTable創建ggvis堆棧條形圖時,「邏輯索引向量的長度錯誤」
我能夠成功地將這一功能對於ggvis散點圖,但是當我試圖爲柱狀圖我得到的錯誤Error in: Length of logical index vector must be 1 or 10, got: 0
這裏做同樣是server.R
的散點圖其中工程
server <- function(input, output) {
server_DF <- data.frame(dataset)
output$html_data_table <- DT::renderDataTable({
DT::datatable(unique(server_DF[, input$show_vars, drop = FALSE]),
filter = "top", selection = "multiple")
})
filtered_rows <- reactive({
input$html_data_table_rows_all
})
vis <- reactive({
# filtered_rows <- input$html_data_table_rows_all
xvar <- prop("x", as.symbol(input$xvar))
yvar <- prop("y", as.symbol(input$yvar))
colvar <- prop("fill", as.symbol(input$colvar))
p <- server_DF[filtered_rows(),] %>%
ggvis(x = xvar, y = yvar, fill := colvar) %>%
layer_points() %>%
set_options(width = "auto", height = "auto", resizable=FALSE)
p
})
vis %>% bind_shiny("plot", "ggvis_ui")
}
這是條形圖的代碼,它給了我錯誤。請注意,唯一不同的是layer_bars()
在上面的代碼中是layer_points()
。
server <- function(input, output) {
server_DF <- data.frame(dataset)
output$html_data_table <- DT::renderDataTable({
DT::datatable(unique(server_DF[, input$show_vars, drop = FALSE]),
filter = "top", selection = "multiple")
})
filtered_rows <- reactive({
input$html_data_table_rows_all
})
vis <- reactive({
# filtered_rows <- input$html_data_table_rows_all
xvar <- prop("x", as.symbol(input$xvar))
yvar <- prop("y", as.symbol(input$yvar))
colvar <- prop("fill", as.symbol(input$colvar))
p <- server_DF[filtered_rows(),] %>%
ggvis(x = xvar, y = yvar, fill := colvar) %>%
layer_bars() %>%
set_options(width = "auto", height = "auto", resizable=FALSE)
p
})
vis %>% bind_shiny("plot", "ggvis_ui")
}
發現如果我刪除fill := colvar
它會生成直方圖。但是當我像散點圖那樣輸入fill := colvar
時,出現錯誤。
以下是ui.R
的完整代碼和散點圖的樣本數據。只是想複製下面的堆疊酒吧。
library(shiny)
library(data.table)
library(ggvis)
library(DT)
data("diamonds")
dataset <- diamonds
rm(diamonds)
axis_vars <- names(dataset)
ui <- fluidPage(pageWithSidebar(
headerPanel("Sample Dashboard"),
sidebarPanel(
selectInput('xvar', 'X Axis', axis_vars, selected = axis_vars[2]),
selectInput('yvar', 'Y Axis', axis_vars, selected = axis_vars[7]),
selectInput("colvar", "Colour", axis_vars, selected = axis_vars[4])
),
mainPanel(
fluidRow(
ggvisOutput("plot")
),
fluidRow(
column(width = 4,
checkboxGroupInput('show_vars', 'Select Columns To Display',
names(dataset),selected = names(dataset))
),
column(width = 8,
div(style = 'overflow-x: scroll', DT::dataTableOutput('html_data_table'))
)
)
)
))
server <- function(input, output) {
server_DF <- data.frame(dataset)
output$html_data_table <- DT::renderDataTable({
DT::datatable(unique(server_DF[, input$show_vars, drop = FALSE]),
filter = "top", selection = "multiple")
})
filtered_rows <- reactive({
input$html_data_table_rows_all
})
vis <- reactive({
# filtered_rows <- input$html_data_table_rows_all
xvar <- prop("x", as.symbol(input$xvar))
yvar <- prop("y", as.symbol(input$yvar))
colvar <- prop("fill", as.symbol(input$colvar))
p <- server_DF[filtered_rows(),] %>%
ggvis(x = xvar, y = yvar, fill = colvar) %>%
layer_points()
p
})
vis %>% bind_shiny("plot")
}
shinyApp(ui, server)
一直在掙扎着這幾天。任何幫助將不勝感激。