在尝试为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有时候就像名字一样。 我尝试使用列表上的简单循环执行此操作,但返回错误,告诉我在意外令牌附近存在语法错误。
怎么能解决这个问题?
答案 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]])
)
}
})
})