Shiny Error: replacement has 2 rows, data has 1
Shiny Error: replacement has 2 rows, data has 1
我正在尝试创建一个 Shiny 应用程序,用户可以在其中 select 下拉框中的“选项”(使用 selectInput 创建),Shiny 将显示数据 table 相应地。现在,我有部分用户可以在每次观察时单击 link,它会直接 link 到网站找出答案,但当用户 [=20] 时我似乎无法让它工作=] “全部”以外的选项。基本上,当我 select 选项“AZ”或“NC”时,它引发了这个错误“替换有 2 行,数据有 1”。请看图片,您可能会明白我的意思。 Data table with "All" option selected, no error Data table when "AZ" is selected, incurred error
感谢您的帮助!
这是可重现的代码。
# load packages
library(shiny)
# Create a sample df
names <- c("Mister Car Wash", "Driven Brands Car Wash")
city <- c("Tucson", "Charlotte")
state <- c("AZ", "NC")
locations <- c("350 locations", "300 locations")
website <- c("www.mistercarwash.com", "www.drivenbrandscarwash.com")
car_df <- data.frame(names, city, state, locations, website)
# # create the ui
ui <- fluidPage(
titlePanel("Top 99 Car Wash Chains in the U.S."),
sidebarLayout(
sidebarPanel(
selectInput(
inputId ="statenames",
label = "Select the State:",
choices = c("All", "AZ", "NC"),
selected = "All") # default value
),
mainPanel(
width=9,
DT::dataTableOutput('table')
)
)
)
# create the server
server <- function(input, output) {
output$table <- renderDT({
data <- car_df
if (input$statenames != "All") {
data <- data[car_df$state == input$statenames,]
} else{
(input$statenames == car_df$State)
}
#add html link tags
data$Website <- paste0("<a href='//", car_df$website,"'>",car_df$website,"</a>")
datatable(data, extensions = 'Buttons', rownames = FALSE, escape = FALSE, selection = 'none',
colnames = c('names', 'city', 'state', 'locations','website'),
options = list(buttons = c("copy", "csv", "excel"), paging = FALSE, dom = 'Bfrtip')
)
})
}
# Call shinyapp
shinyApp(ui=ui, server=server)
罪魁祸首是你的陈述
data$Website <- paste0("<a href='//", car_df$website,"'>",car_df$website,"</a>")
如您所知,当您 select 一个状态时,data
只有一个记录。但是,car_df
有 2 条记录。
试试这个
output$table <- renderDT({
req(input$statenames)
data <- car_df
if (input$statenames != "All") {
data <- data[car_df$state == input$statenames,]
data$Website <- paste0("<a href='//", data$website,"'>",data$website,"</a>")
} else{
#(input$statenames == car_df$State)
data$Website <- paste0("<a href='//", car_df$website,"'>",car_df$website,"</a>")
}
#add html link tags
#data$Website <- paste0("<a href='//", car_df$website,"'>",car_df$website,"</a>")
datatable(data, extensions = 'Buttons', rownames = FALSE, escape = FALSE, selection = 'none',
colnames = c('names', 'city', 'state', 'locations','website'),
options = list(buttons = c("copy", "csv", "excel"), paging = FALSE, dom = 'Bfrtip')
)
})
我正在尝试创建一个 Shiny 应用程序,用户可以在其中 select 下拉框中的“选项”(使用 selectInput 创建),Shiny 将显示数据 table 相应地。现在,我有部分用户可以在每次观察时单击 link,它会直接 link 到网站找出答案,但当用户 [=20] 时我似乎无法让它工作=] “全部”以外的选项。基本上,当我 select 选项“AZ”或“NC”时,它引发了这个错误“替换有 2 行,数据有 1”。请看图片,您可能会明白我的意思。 Data table with "All" option selected, no error Data table when "AZ" is selected, incurred error
感谢您的帮助!
这是可重现的代码。
# load packages
library(shiny)
# Create a sample df
names <- c("Mister Car Wash", "Driven Brands Car Wash")
city <- c("Tucson", "Charlotte")
state <- c("AZ", "NC")
locations <- c("350 locations", "300 locations")
website <- c("www.mistercarwash.com", "www.drivenbrandscarwash.com")
car_df <- data.frame(names, city, state, locations, website)
# # create the ui
ui <- fluidPage(
titlePanel("Top 99 Car Wash Chains in the U.S."),
sidebarLayout(
sidebarPanel(
selectInput(
inputId ="statenames",
label = "Select the State:",
choices = c("All", "AZ", "NC"),
selected = "All") # default value
),
mainPanel(
width=9,
DT::dataTableOutput('table')
)
)
)
# create the server
server <- function(input, output) {
output$table <- renderDT({
data <- car_df
if (input$statenames != "All") {
data <- data[car_df$state == input$statenames,]
} else{
(input$statenames == car_df$State)
}
#add html link tags
data$Website <- paste0("<a href='//", car_df$website,"'>",car_df$website,"</a>")
datatable(data, extensions = 'Buttons', rownames = FALSE, escape = FALSE, selection = 'none',
colnames = c('names', 'city', 'state', 'locations','website'),
options = list(buttons = c("copy", "csv", "excel"), paging = FALSE, dom = 'Bfrtip')
)
})
}
# Call shinyapp
shinyApp(ui=ui, server=server)
罪魁祸首是你的陈述
data$Website <- paste0("<a href='//", car_df$website,"'>",car_df$website,"</a>")
如您所知,当您 select 一个状态时,data
只有一个记录。但是,car_df
有 2 条记录。
试试这个
output$table <- renderDT({
req(input$statenames)
data <- car_df
if (input$statenames != "All") {
data <- data[car_df$state == input$statenames,]
data$Website <- paste0("<a href='//", data$website,"'>",data$website,"</a>")
} else{
#(input$statenames == car_df$State)
data$Website <- paste0("<a href='//", car_df$website,"'>",car_df$website,"</a>")
}
#add html link tags
#data$Website <- paste0("<a href='//", car_df$website,"'>",car_df$website,"</a>")
datatable(data, extensions = 'Buttons', rownames = FALSE, escape = FALSE, selection = 'none',
colnames = c('names', 'city', 'state', 'locations','website'),
options = list(buttons = c("copy", "csv", "excel"), paging = FALSE, dom = 'Bfrtip')
)
})