gpt4 book ai didi

r - 有没有办法为rhandsontable中的不同行提供不同的下拉选项?

转载 作者:行者123 更新时间:2023-12-02 01:57:39 25 4
gpt4 key购买 nike

我正在制作一个 Shiny 的应用程序,用户需要在表格中选择下拉选项。我正在使用 rhandsontable,但是似乎我只能为单个列提供一组下拉选项。因此,第 1 行与第 800 行具有相同的选项。我希望第 1 行具有与第 800 行不同的下拉选项集。

有办法做到这一点吗?

我考虑过创建单独的表格并将它们放在一起,看起来就像一张表格。只有第一个表有列标题,其下面的所有其他表都没有列标题。我试图避免这种情况,因为 rhandsontables 有水平和垂直滚动条,并且没有办法在多个表之间同步滚动条。这会让“一张 table ”看起来有点不对劲。实际上,将所有数据放在一个表中看起来和功能都会更好。

下面是一个 super 简单的例子:

  require(shiny)
require(rhandsontable)

ui <- fluidPage(
hr(""),

# Display table
mainPanel(rHandsontableOutput("ExampleTable"))
)

server <- function(input, output) {

output$ExampleTable <- renderRHandsontable({

# creating table that will be displayed
df <- data.frame(Object = c("car", "car", "car", "house", "house", "house"), Needs = NA, stringsAsFactors = FALSE)

# defining dropdown options
dropdownOptions <- c("tires", "wipers", "headlights", "gutters", "carpet")

rhandsontable(df, rowHeaders = NULL, stretchH = "all") %>%
hot_col("Object", readOnly = TRUE) %>%
hot_col("Needs", type = "dropdown", source = dropdownOptions)

})
}

# Run the application
shinyApp(ui = ui, server = server)

我希望下拉选项仅包含“对象”列值为“汽车”的所有行的“轮胎”、“雨刷器”和“车头灯”。因为汽车永远不需要排水沟或地毯,所以我不希望用户能够选择这些选项中的任何一个。

对于“对象”列中值为“house”的每一行,用户在下拉列表中应该只显示两个选项...“排水沟”和“地毯”。这将有助于避免用户错误。

最佳答案

这是一个基于我分享的示例的可行解决方案 here (以及上面提到的@Ben):

library(shiny)
library(rhandsontable)

ui <- fluidPage(
hr(),
# Display table
mainPanel(rHandsontableOutput("ExampleTable"))
)

server <- function(input, output) {

# creating table that will be displayed
DF <- reactiveVal(data.frame(Object = c("car", "car", "car", "house", "house", "house"), Needs = NA_character_, stringsAsFactors = FALSE))

# update df() on user changes
observeEvent(input$ExampleTable, {
DF(hot_to_r(input$ExampleTable))
})

output$ExampleTable <- renderRHandsontable({

# defining dropdown options
carOptions <- c(NA_character_, "tires", "wipers", "headlights")
houseOptions <- c(NA_character_, "gutters", "carpet")

tmpExampleTable <- rhandsontable(DF(), rowHeaders = NULL, stretchH = "all", selectCallback = TRUE, width = 300, height = 300) %>%
hot_col("Object", readOnly = TRUE) %>%
hot_col("Needs", allowInvalid = FALSE, type = "dropdown", source = NA_character_, readOnly = TRUE)

if(!is.null(input$ExampleTable_select$select$r)){

selectedObject <- DF()[input$ExampleTable_select$select$r, "Object"]

if(selectedObject == "car"){
tmpExampleTable <- hot_col(tmpExampleTable, col = "Needs", allowInvalid = FALSE, type = "dropdown", source = carOptions) %>% hot_cell(row = input$ExampleTable_select$select$r, col = "Needs", readOnly = FALSE)
}

if(selectedObject == "house"){
tmpExampleTable <- hot_col(tmpExampleTable, col = "Needs", allowInvalid = FALSE, type = "dropdown", source = houseOptions) %>% hot_cell(row = input$ExampleTable_select$select$r, col = "Needs", readOnly = FALSE)
}
}

tmpExampleTable

})
}

# Run the application
shinyApp(ui = ui, server = server)

编辑: Here您可以找到一种用于依赖 Rhandsontable 下拉列表的通用方法。

关于r - 有没有办法为rhandsontable中的不同行提供不同的下拉选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57634100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com