如何在 R Shiny 中使用 input$i 构建 'for' 循环

How to build a 'for' loop with input$i in R Shiny

在我闪亮的应用程序中,我使用 for 循环构建了许多复选框,如下所示:

landelist <- c("Danmark", "Tjekkiet", "Østrig", "Belgien", "Tyskland", "Sverige", "USA", "Norge", "Island")

landecheckbox <- c()

for (land in landelist){
  landechek <- paste0("<label class=\"checkbox inline\"><input id=\"", land, "\" type=\"checkbox\" checked><span>", land, "</span></label>")
  landecheckbox <- c(landechek, landecheckbox)
}

然后我将它打印到我的 HTML:

  output$inputdata <- renderText({

    landecheckbox

  })

到目前为止一切顺利!但是,当我尝试反向执行相同的循环时,它不会让我这样做。这是我正在尝试做的事情:

filterdata <- data

filterland <- c()

for (landeselect in landelist) if (input$landeselect == TRUE) filterland <- c(landeselect, filterland)

filterdata <- filterdata %>% filter(filterdata$Contry %in% filterland)

所以我想让它做的是查找输入 ID "Danmark",然后是 "Tjekkiet",然后是“Østrig”等等。它所做的是,它查找输入 id "landeselect" 9 次!

所以我的问题是,我该如何解决?

如果要按字符串名称而不是 $ 进行子集化,请使用 [[[。来自 Hadley 的 Advanced R, "x$y is equivalent to x[["y", exact = FALSE]]."

## Create input
input <- `names<-`(lapply(landelist, function(x) sample(0:1, 1)), landelist)
filterland <- c()

for (landeselect in landelist) 
    if (input[[landeselect]] == TRUE)  # use `[[` to subset
        filterland <- c(landeselect, filterland)