【问题标题】:Modify a function in an R package to fit for purpose修改 R 包中的函数以适应用途
【发布时间】:2016-12-11 15:44:04
【问题描述】:

shinydashboard 包具有三种类型的菜单——消息、通知和任务。我想使用通知菜单发出警报。但我必须对函数进行一些修改。下图是来自软件包网站 (link) 的通知菜单演示。我想删除“您有 3 个通知”的行或将其更改为“您有三个警报”。我还想禁用切换功能,并用“今日警报”或类似的东西替换顶部的三个图标。在 shinydashboard 的“dropdownMenu”函数中执行此操作的函数。我可以通过使用查看函数源代码

             library(shinydashboard)
             body(dropdownMenu)

但需要帮助如何编辑和使用修改后的源代码。

【问题讨论】:

    标签: r shinydashboard


    【解决方案1】:

    在修改我为More efficient plot functions in R when millions of points are present? 所做的答案时,我必须解决类似的问题。这是一个适合您需要的版本:

    my_dropdownMenu = function(...,
      type = c("messages", "notifications", "tasks"),
      badgeStatus = "primary", icon = NULL, .list = NULL)
    {
      message("Got here!")
      # ...
      # (COPY AND PASTE body(mydropdownMenu) HERE)
      # (and then make your modifications)
    }
    
    # helper function, see
    # https://stat.ethz.ch/pipermail/r-help/2008-August/171217.html
    rebindPackageVar = function(pkg, name, new) {
      # assignInNamespace() no longer works here, thanks nannies
      ns=asNamespace(pkg)
      unlockBinding(name,ns)
      assign(name,new,envir=ns,inherits=F)
      assign(name,new,envir=globalenv())
      lockBinding(name,ns)
    }
    
    # make sure we can call non-exported functions (like validateStatus())
    environment(my_dropdownMenu) = asNamespace("shinydashboard")
    
    # now rebind the dropdownMenu function
    rebindPackageVar("shinydashboard", "dropdownMenu", my_dropdownMenu);
    

    示例输出。 “到了!”显示我们修改后的版本正在执行,剩下的就是函数的正常输出:

    > dropdownMenu()
    Got here!
    <li class="dropdown messages-menu">
      <a href="#" class="dropdown-toggle" data-toggle="dropdown">
          <i class="fa fa-envelope"></i>
    ...
    

    【讨论】:

    • 我可能误解了你的问题。看这个问题:stackoverflow.com/questions/40851634/… 为“dashboardHeader()”指定自定义“dropdownMenu”函数似乎相当容易,您不需要在包本身中覆盖“dropdownMenu”。如果是这种情况,我应该删除我的答案......我从来没有使用过闪亮的 FWIW。
    猜你喜欢
    • 2014-12-20
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 2017-02-01
    • 1970-01-01
    相关资源
    最近更新 更多