在R中将多个方程转换为函数

时间:2017-04-18 20:47:46

标签: r function equation

我有一系列的滚雪球'每个方程都提供一个输出数字,然后输入下一个方程式。我想在R中有效地将所有这些构建方程转换为一个(如果可能的话)函数。我的变量将来自我的数据帧中的列。提供了许多方程的示例。 (这是用于确定顶空样品中的气体浓度)。

    Hn2o=1/exp((A+(B/df$Temp)+C*log(df$Temp/K)+D*df$Temp)/R)
          A,B,C,D,K, and R are constants
    CgN2O=df$N2O_ppm
    Atm=df$Barometric_pressure
    PN2O=CgN2O*Atm
    AqN2O=Nw*((PN2O/Hn2o)*Mw)*10^3
          Nw and Mw are constants

2 个答案:

答案 0 :(得分:1)

像这样的东西。这允许您输入数据集和变量名称,并假设您的常量确实是常量,硬编码就可以了。

 labelFormatter: function () {
                    return '<div class="legend-label-md row" ><span class="col-md-8">' + this.name +
                    '</span><span class="col-md-1" >' + this.value +
                    '%</span></div> ';
                },

替代:

funcName <- function(df, temp = "Temp", n20 = "N20_ppm", bp = "Barometric_pressure") {
    A <- 100
    B <- 100
    C <- 100
    D <- 100
    K <- 100
    R <- 100
    Nw <- 100
    Mw <- 100
    Hn2o <- 1 / exp((A + (B/df[[temp]]) + (C*log(df[[temp]]/K)) + (D*df[[temp]])) / R)
    AqN20 <- Nw * ((df[[n20]] * df[[bp]] / Hn2o) * Mw) * 10^3
    return(AqN20)
}

AqN20 <- funcName(df)

使用以下内容输入替代值:

funcName <- function(df, temp = "Temp", n20 = "N20_ppm", bp = "Barometric_pressure", A = 100, B = 100, C = 100, D = 100, K = 100, R = 100, Nw = 100, Mw = 100) {
    Hn2o <- 1 / exp((A + (B/df[[temp]]) + (C*log(df[[temp]]/K)) + (D*df[[temp]])) / R)
    AqN20 <- Nw * ((df[[n20]] * df[[bp]] / Hn2o) * Mw) * 10^3
    return(AqN20)
}

答案 1 :(得分:0)

我建议您阅读有关编写函数的内容,可能在Advanced R中。这应该是相对简单的:

myfunc <- function(Temp, N20, Baro,
                   A = 1, B = 2, C = 3, D = 4, K = 5, R = 6,
                   Nw = 7, Mw = 8) {
  Hn2o <- 1 / exp((A+(B/Temp)+C*log(Temp/K)+D*Temp)/R)
  PN29 <- N20 * Baro
  Nw * ( (PN20 / Hn2o)*Mw ) * 10^3
}

是否将&#34;常数放在&#34;我在这里完成的函数形式中的变量,或者作为函数中的简单变量,主要是个人的事情。

myfunc <- function(Temp, N20, Baro) {
  A = 1; B = 2; C = 3; D = 4; K = 5; R = 6
  Nw = 7; Mw = 8
  Hn2o <- 1 / exp((A+(B/Temp)+C*log(Temp/K)+D*Temp)/R)
  PN29 <- N20 * Baro
  Nw * ( (PN20 / Hn2o)*Mw ) * 10^3
}

(我将所有常量放在单行上只是为了与其他函数直接比较,而不是它会提高性能。)

我没有将数据帧作为数据帧,而是将事物作为直接向量处理。这样,如果你有一个data.frame,你可以只输入列:

df <- data.frame(temperature = 1, n20_ppm = 2, barometric = 3)
results <- myfunc(df$temperature, df$n20_ppm, df$barometric)