我有一系列的滚雪球'每个方程都提供一个输出数字,然后输入下一个方程式。我想在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
答案 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)