簡體   English   中英

將多個方程式轉換為R中的函數

[英]Convert multiple equations into function in R

我有一系列的“雪球式”方程式,每個方程式都提供一個輸出數字,然后將其輸入到下一個方程式中。 我想將所有這些構建方程高效地轉換成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)

我建議您閱讀有關編寫函數的信息,也許是在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
}

像我在此處將“常量”變量放入函數形式中一樣,還是將其作為函數中的簡單變量,通常都是個人事務。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM