循环遍历ShinyApps服务器中的名称列表

时间:2017-01-18 16:37:45

标签: r loops for-loop shiny infobox

在尝试为Shiny项目创建一系列InfoBox时,我遇到了一个循环,尽管我已经无休止地尝试解决,但最终我将代码粘贴的次数与我需要的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 在同一块完全相同的代码中进行迭代,而不必复制粘贴为namy有时候就像名字一样。 我尝试使用列表上的简单循环执行此操作,但返回错误,告诉我在意外令牌附近存在语法错误。

怎么能解决这个问题?

1 个答案:

答案 0 :(得分:2)

使用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]])
    )          
  }
})
})