【问题标题】:Minimize a function of characters inputs in R最小化R中字符输入的函数
【发布时间】:2021-10-03 12:21:41
【问题描述】:

我有以下函数要求最小值:

model <- Create(parameter1 = list(model = "a" , "b"),
                parameter2 = list(distribution = "x" , "y"))

这个函数的四个输入都是字符,并且有尽可能多的值:

parameter1: "a", "b", "c", "d", "e"
parameter2: "x", "y", "z", "w", "t", "v"

我已经尝试了几次optim 函数,但没有成功。

感谢任何帮助。

【问题讨论】:

    标签: r function optimization minimize


    【解决方案1】:

    在每组可能的输入值上评估函数并取最小值。

    # test function
    Create <- function(parameter1, parameter2) {
      sum(match(unlist(parameter1), p1), match(unlist(parameter2), p2))
    }
      
    p1 <- c("a", "b", "c", "d", "e")
    p2 <- c("x", "y", "z", "w", "t", "v")
    g <- expand.grid(p1, p1, p2, p2, stringsAsFactors = FALSE)
    
    obj <- function(x) Create(x[1:2], x[3:4])
    ix <- which.min(apply(g, 1, obj))
    
    g[ix, ]
    ##   Var1 Var2 Var3 Var4
    ## 1    a    a    x    x
    
    obj(g[ix, ])
    ## [1] 4
    

    【讨论】:

    • @Grothendieck 我认为它有效!由于有很多可能的组合,我将向您更新它是否可以正常运行。我只需要添加g &lt;- data.frame(lapply(g, as.character), stringsAsFactors=FALSE),因为这个函数只接受字符参数。谢谢!
    • 我收到了这个错误信息:Error in which.min(future_apply(g, 1, obj)) : 'list' object cannot be coerced to type 'double'
    • 我已经修改了答案,将 stringsAsFactors=FALSE 作为参数添加到 grid.expand 尽管对于答案中显示的 Create 它实际上并不需要,但也没有伤害。答案中的自包含可重现代码有效,但它的应用将取决于您,因为您没有提供完整的可重现测试用例。
    猜你喜欢
    • 2013-06-05
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    相关资源
    最近更新 更多