r - R Shiny 中的自动 GUI 生成

标签 r user-interface shiny shiny-server

我遇到的问题是我无法在 Shiny 中自动生成 GUI。这个想法是查看有多少文件并为每个文件生成一组图像+按钮。我相信这个问题的解决方案是 R 中任何 GUI 生成的解决方案。

我能够静态地执行此操作,为每个按钮和图像编写代码,但是将它放在 for 循环中或在 server.R 中呈现图像并将其作为 HTML 传递给ui.R.我将在下面解释。

我要生成的代码是:

actionButton("sug1",icon=imageOutput("sug1",width="100px",height="100px"),label="First")

这给了我一个 100x100 的可点击图像。

我尝试了以下方法:

1) 在 ui.R 内用 for 循环包围它,并使 ID("sug1") 和标签成为变量,其中最后一个数字在每个循环中递增。

2) 累加结果并在server.R中使用HTML()函数稍后在ui.R中输出

output$generateImages <- renderUI({
    (...)
    for(...){
        (...)
        w <- paste(w, actionButton(paste("oc",which(dir==folders)),label=dir))
   }
   HTML(w)
   })

然后在 ui.R 中我希望它出现的地方:

htmlOutput("generateImages")

3) 我猜想使用 HTMLoutput 或 UIOutput 应该会有帮助,但考虑到我的代码生成的 HTML 输出(如右击/查看页面源代码所示)是:

<button id="sug1" type="button" class="btn action-button">
<div id="sug1" class="shiny-image-output" style="width: 100px ; height: 100px"></div>
First
</button>

我不知道如何生成它,因为我不知道如何以及在何处插入对图像的引用。

希望得到帮助。

最佳答案

感谢 Jeff 在评论区的帮助,我得到了一些循环生成 UI 元素的东西。

整个技巧是有一个 renderUI 函数,里面有一个 for 循环,它累积列表中的元素,在我的例子中是:

LL[[i]] <- list(actionButton(txt,icon=imageOutput(pp,width="100px",height="100px"),label=dir))

此列表必须由函数返回。所有这些都在 server.R 中。在 ui.R 中应该这样写:

uiOutput(nameOfTheFunctionThatReturnedTheList)

但我的问题仍然是我无法使用相同的循环显示图像...帮助任何人? ;)

关于r - R Shiny 中的自动 GUI 生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23226627/

相关文章:

r - 如何在ggplot中使用R的原生管道和占位符

r - Shiny :仅在文件上传后显示按钮

r - 如何计算使用 R 更改一列中的值之前的持续时间?

r - data.table .. 用 j 中的函数表示法

r - 在 R 中使用 gridextra 时,向 tableGrob 添加多行脚注

r - Shiny :在操作按钮单击时显示 mainPanel

r - R shiny 中的多个 react 性选择输入

c# - WPF 使用分隔符调整 GUI 部分的大小

Java Swing : Making a panel to want to be as wide as possible

用于管理 UI 元素的 Android 设计模式