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