我正在尝试收集给定数据集的用户输入。我想插入一个列,用户可以在其中确定是否要拥有mtdata
集中的其中一个汽车。这是完全主观的,因为意见因人而异,所以我无法对此进行编程。有没有办法附加一个额外的列,可以是一个复选框或下拉菜单来识别用户“想要拥有的汽车?
library(shiny)
shinyApp(ui = shinyUI(fluidPage(
titlePanel("Interesting Cars"),
sidebarLayout(
sidebarPanel(
helpText("This is a side bar")),
mainPanel(
tableOutput("view")
)
)
)),
server = function(input, output) {
output$view <- renderTable({
head(mtcars[, 1:4], n = 6)
})
})
答案 0 :(得分:0)
怎么样,你可以使用DT
库。通过添加filter
选项,用户可以定义所需的不同组件,并查看出现的汽车。
library(shiny)
library(DT)
shinyApp(ui = shinyUI(fluidPage(
titlePanel("Interesting Cars"),
sidebarLayout(
sidebarPanel(
helpText("This is a side bar")),
mainPanel(
DT::dataTableOutput("view")
)
)
)),
server = function(input, output) {
output$view <- DT::renderDataTable({
datatable(mtcars,
filter = "top"
)
})
})
修改强>
如果真的如此重要,添加另一个列表明它是否“有趣”,如果您打算让用户在不同的条件下分配它,那么将会有更多的代码要编写。这是一个只有mpg
的例子。这里的基本思想是您将数据分配给reactiveValues
函数。然后可以根据需要进行修改。显然可以在更多方面进行改进(因为它将继续添加列),但它证明了这一概念。
shinyApp(ui = shinyUI(fluidPage(
titlePanel("Interesting Cars"),
sidebarLayout(
sidebarPanel(
helpText("This is a side bar"),
uiOutput("mpg"),
actionButton("add_label", "Mark Interesting")
),
mainPanel(
DT::dataTableOutput("view")
)
)
)),
server = function(input, output) {
values <- reactiveValues(
mydata = mtcars
)
output$mpg <- renderUI({
numericInput("mpg_input", "MPG Cutoff?",
value = 15
)
})
output$view <- DT::renderDataTable({
datatable(values$mydata
)
})
observeEvent(input$add_label, {
validate(
need(!is.null(input$mpg_input), "need mpg value")
)
values$mydata <- data.frame(values$mydata,
Interesting_Flag =
ifelse(values$mydata$mpg > input$mpg_input,
"Interesting",
"Not Interesting"))
})
})