【问题标题】:Loop over name list in a ShinyApps server.R在 ShinyApps server.R 中循环遍历名称列表
【发布时间】:2017-06-03 03:29:01
【问题描述】:

在尝试为 Shiny 项目创建一系列 InfoBox 时,我遇到了一个循环,即使我无休止地尝试解决这个循环,最终我还是会根据需要多次粘贴代码,这难以置信。 我原来的代码块是这样的

output$**name** <- renderValueBox({
  InformacionIE2 <- InformacionIE2.df[ which(InformacionIE2.df$INSTITUCIONEDUCATIVA==input$input_typen),]
  if (InformacionIE2$**name** =="Si") {
    infoBox("Planos Electricos",
            color = "green",
            icon = icon("thumbs-up", lib = "glyphicon"),
            print (InformacionIE2$**name**)
    )
  } else {
    infoBox("**name** ",
            color = "red",
            icon = icon("thumbs-down", lib = "glyphicon"),
            print (InformacionIE2$**name**)
    )          
  }
})

我需要找到一种方法,让 name1、name2、name3、...、nameN 在完全相同的代码块中代替 name 进行迭代,而无需将 paste 复制为 name有名字的时候。 我尝试通过一个简单的列表循环来执行此操作,但返回一个错误,告诉我在意外标记附近存在语法错误。

如何解决?

【问题讨论】:

  • 通过 $ 字符串访问 outout 将不起作用。尝试 output[["name"]] 代替,对于 InformacionIE2 相同。如果这没有帮助,一个可重现的应用程序会很有帮助。

标签: r loops for-loop shiny infobox


【解决方案1】:

使用 lapply 而不是 for 循环,它应该可以工作。不知道为什么:

lapply(**names**, function(name) {
output[[name]] <- <- renderValueBox({
  InformacionIE2 <- InformacionIE2.df[ which(InformacionIE2.df$INSTITUCIONEDUCATIVA==input$input_typen),]
  if (InformacionIE2[[name]] =="Si") {
    infoBox("Planos Electricos",
            color = "green",
            icon = icon("thumbs-up", lib = "glyphicon"),
            print (InformacionIE2[[name]])
    )
  } else {
    infoBox(name,
            color = "red",
            icon = icon("thumbs-down", lib = "glyphicon"),
            print (InformacionIE2[[name]])
    )          
  }
})
}) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-25
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2021-04-24
    • 1970-01-01
    相关资源
    最近更新 更多