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

将多个方程转换为R中的函数,r,function,equation,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$Baromet

我有一系列的“滚雪球”方程,每个方程提供一个输出数,然后输入下一个方程。如果可能的话,我想有效地将所有这些构建方程转换为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

像这样的。这允许您输入数据集和变量名,并假设您的常量确实是常量,则可以对它们进行硬编码

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)
}
输入具有以下内容的替代值:

altA <- 110
altB <- 90
altR <- 150

AqN20 <- funcName(df, A = altA, B = altB, R = altR)

我建议您阅读有关编写函数的内容,也许是在。这应该是比较直截了当的:

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
}
无论是像我在这里所做的那样将常量变量放入函数形式中,还是将其作为函数中的简单变量,这都是个人的事情

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)

您的输入和输出是什么?请通过单击您喜欢的输入旁边的复选标记来接受其中一个问题。输入是列值:df$Temp、df$N2O\u ppm和df$Barometric\u pressure。在这个例子中,我想要的输出是AqN2O,然后我将其用于另一个下游方程式。我在网上阅读了几个小时,但由于某种原因,我无法理解这些函数。可能是在学习dplyr软件包之前的几个小时。谢谢我试图运行此程序,但后来调用AqN20时,收到一条错误消息error:找不到对象“AqN20”。此外,在运行此函数后,我指定的常量实际上不会显示在全局环境查看器中,但函数会显示。很抱歉成为noob。是的,这些值是函数的内部值。您需要将返回值赋给一个变量,使其在全局环境中显示。。。AqN20这个方法很有效,现在对我来说更有意义了!再次感谢!