闪亮的条件信息框输出

时间:2016-12-27 23:24:30

标签: r shiny

我有一个使用shinyDashboard创建的仪表板,它将显示一些操作信息。我们的IT组织有5个区域可以声明“触摸”或“无触摸”,具体取决于环境中发生的情况。

我使用简单的REST API来获取数据,看起来像(单列数据框):

Status
eECC:Touch
DOC:Touch
CCC:Touch
GEN:Touch
IT:No Touch

该数据帧被写入.RData文件并使用reactiveFileReader()加载。一旦它存在,我想构建一些infoBox()es以在屏幕顶部显示横幅以显示环境以及它们是否可以对其进行更改。这是我的ui.R代码的剪辑:

 fluidRow(
    h4("Touch / No Touch", align="center"),
    infoBox("ECC", "TOUCH", icon = icon("ok", lib = "glyphicon"), width = 2, color = "green"),
    infoBox("DOC", "TOUCH", icon = icon("ok", lib = "glyphicon"), width = 2, color = "green"),
    infoBox("CCC", "TOUCH", icon = icon("ok", lib = "glyphicon"), width = 2, color = "green"),
    infoBox("GEN","TOUCH", icon = icon("ok", lib = "glyphicon"), width = 2, color = "green"),
    infoBox("IT", "NO TOUCH", icon = icon("alert", lib = "glyphicon"), width = 2, color = "red")
    ),

所以,这是一个静态的例子,我知道。它最初是作为概念证明而实施的。我想做的是从读取touchNoTouchDF.RData文件中的数据获取输入,并根据RData文件中的内容更改颜色,图标和文本。

我的第一次尝试是使用if else语句,但看起来没有那么闪亮,或者我做错了:

fluidRow(
h4("Touch / No Touch", align="center"),
if(touchNoTouchDF[1] == "ECC:Touch") {
infoBox("ECC", "TOUCH", icon = icon("ok", lib = "glyphicon"), width = 2, color = "green")} else { infoBox("ECC", "TOUCH", icon = icon("ok", lib = "glyphicon"), width = 2, color = "green")},
...
...

这似乎不起作用,所以我的下一个想法是在我的数据帧中“构建”infoBox()函数内的字符串并处理我的R脚本中的逻辑。因此,我的数据框(现在是2列)看起来像:

Status      UI
ECC:Touch   "ECC", "TOUCH", icon = icon("ok", lib = "glyphicon"), width... 

然后,在构建UI时,只需执行以下操作:

fluidRow(
  h4("Touch / No Touch", align="center"),
  infoBox(touchNoTouchDF[1,2]),
  infoBox(touchNoTouchDF[2,2]),
  infoBox(touchNoTouchDF[3,2]),
  infoBox(touchNoTouchDF[4,2]),
  infoBox(touchNoTouchDF[5,2])
),

嗯,那只是打印在infoBox上的文字(所有大写字母也是如此,对我来说似乎很奇怪......)。无论如何,我似乎无法弄清楚如何使这些infoBox()动态与我从RData文件中读取的内容。有小费吗?在将文本调用到infoBox()函数而不仅仅是数据框和行/列时,是否需要使用某个函数?提前谢谢!

1 个答案:

答案 0 :(得分:4)

您应该尝试在闪亮的应用程序的服务器部分中呈现infoBox。下面的工作示例:

void    *ft_realloc(void *ptr, size_t len)
{
    void    *real;

    real = (void *)malloc(len);
    if (real)
    {
        memset(real, 0, len);
        memcpy(real, ptr, strlen(ptr));
    }
    free(ptr);
    return (real);
}