![](/img/trans.png)
[英]How to find the solutions of multiple nonlinear equations in R using the fsolve function
[英]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.