如何在R中的单独脚本中重载函数/引用具有相同名称的函数?

时间:2016-12-12 09:02:56

标签: r shiny

我的功能基本上使用相同的参数来构建不同的模型,并且 输出结果格式相同。因此,为了组织它们,我将它们分成不同的脚本。 我想将这些函数命名为相同的函数,并通过脚本的名称引用它们,就像在这样的面向对象语言中完成它一样。

class ModelA {
    static void lambda(String sarg) {}
    static void lambda(int iarg) {}
}

class ModelB{
    static void lambda(..) {}
}

class Program{
    public static void main(String[] args){
        ModelA.lambda("somestring");
        ModelA.lambda(1);
        ModelB.lambda(..);
    }
}

在R中,如果两个函数的名称相同,则一个将覆盖另一个。所以我手动为它们添加前缀以防止模型B的lambda覆盖A中的lambda。 有没有办法使用命名空间/环境来实现我想要的?

#server.R
shinyServer(function(input, output,session) {
    ...
    callModule(module=a.server, id="ModelA")
    callModule(module=b.server, id= "ModelB")
    ...
})


#ui.R
shinyUI(fluidPage( 
...
tabsetPanel(
    a.ui.tab(id="ModelA")
    b.ui.tab(id="ModelB")
)
...
))

#global.R
source("modelA.R")
source("modelB.R")

display <- function(input, output, session, lambda){
    ...
    lambda(output, session)
    ...
}

#modelA.R
a.ui.tab <- function(id){
    ns <-NS(id)
    tabPanel(title="Model A",
        output(ns("results")) 
    )
}

a.server<- function(input, output, session){
    output$results <- renderUI({
        display(output, session, a.lambda)
    })
}

a.lambda <- function(output, session){
    ...create a model using the same parameters
}


#modelB.R
b.ui.tab <- function(id){
    ns <-NS(id)
    tabPanel(title="Model B",
        output(ns("results")) 
    )
}
b.server<- function(input, output, session){
    output$results <- renderUI({
        display(output, session, b.lambda)
    })
}

b.lambda <- function(output, session){
    ...create a different model using the same parameters
}

0 个答案:

没有答案