【问题标题】:Getting the wrong output from function in R从 R 中的函数获取错误的输出
【发布时间】:2020-09-28 11:23:23
【问题描述】:

我有以下功能:

Proposed <- function(N_b,Lanes,m,A,x.sqr,e_1,e_2,e_3,e_4,e_5,S,a,b) {
  e <- data.frame(e_1,e_2,e_3,e_4,e_5)
  CSi <- m * ((Lanes/N_b) + (A * (combn(e,Lanes,sum)) / x.sqr) * (b*S^a))
  return(max(CSi))
}

当我将它应用于我的示例数据行时:

> DATA[1, ]
  Lanes N_b N_l   A x.sqr  e_1 e_2  e_3   e_4 e_5  S Proposed.Girder1  UG       CSi    m
1     3   5   4 -12  1440 21.8 9.8 -2.2 -14.2   0 12        0.6261667 100 0.5918969 0.85

与:

x <- DATA[1, ]
Proposed1(x[["N_b"]], x[["Lanes"]], x[["m"]], x[["A"]], x[["x.sqr"]], x[["e_1"]], x[["e_2"]], 
        x[["e_3"]], x[["e_4"]], x[["e_5"]],x[["S"]], a = 0.01, b = 0.5)

# [1] 0.5695447

我得到了正确的答案。但是如果我将代码更改为

Proposed2 <- function(N_b,Lanes,m,A,x.sqr,e_1,e_2,e_3,e_4,e_5,S,a,b) {
  e <- data.frame(e_1,e_2,e_3,e_4,e_5)
  CSi <- m * ((Lanes/N_b) + (A * max(combn(e,Lanes,sum)) / x.sqr) * (b*S^a))
  return(CSi)
}

我预计会有相同的结果,但我得到了错误的答案:

Proposed2(x[["N_b"]], x[["Lanes"]], x[["m"]], x[["A"]], x[["x.sqr"]], x[["e_1"]], x[["e_2"]], 
        x[["e_3"]], x[["e_4"]], x[["e_5"]],x[["S"]], a = 0.01, b = 0.5)

# [1] 0.3952675

【问题讨论】:

    标签: r function dataframe combinations


    【解决方案1】:

    因为A为负数,所以当combn(e,Lanes,sum)最小化时函数最大化。

    x <- readr::read_table2("
     Lanes N_b N_l   A x.sqr  e_1 e_2  e_3   e_4 e_5  S Proposed.Girder1  UG       CSi    m
    3   5   4 -12  1440 21.8 9.8 -2.2 -14.2   0 12        0.6261667 100 0.5918969 0.85
    ")
    
    Proposed3 <- function(N_b,Lanes,m,A,x.sqr,e_1,e_2,e_3,e_4,e_5,S,a,b) {
      e <- data.frame(e_1,e_2,e_3,e_4,e_5)
      # Note "min"
      CSi <- m * ((Lanes/N_b) + (A * min(combn(e,Lanes,sum)) / x.sqr) * (b*S^a))
      return(CSi)
    }
    
    Proposed3(x[["N_b"]], x[["Lanes"]], x[["m"]], x[["A"]], x[["x.sqr"]], x[["e_1"]], x[["e_2"]], 
            x[["e_3"]], x[["e_4"]], x[["e_5"]],x[["S"]], a = 0.01, b = 0.5)
    #> [1] 0.5695447
    

    【讨论】:

      猜你喜欢
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多