2011-08-26 37 views
1

感谢R对函数参数的评估,可以指定一组一致的输入参数,并且可以自动计算其他参数。对输入参数的一致评估

考虑下面的函数,连接浓度,质量,体积和摩尔量为化学稀释,

concentration <- function(c = m/(M*V), m = c*M*V, V = m/(M*c), M = 417.84){ 

    cat(c("c=", c*1e6, "micro.mol/L\n", 
      "m=", m*1e3, "mg\n", 
      "M=", M, "g/mol\n", 
      "V=", V*1e3, "mL\n")) 
    ## mol/L, g, g/mol, L 
invisible(list(c=c, m=m, M=M, V=V)) 

} 

是否有只指定方程之一和具有R搞清楚其他的方式通过倒置?我意识到这仅限于简单的线性关系,因为通常不能通过分析来表示反演。

concentration <- function(c = m/(M*V), m, V, M = 417.84){ 

## { magic.incantation } 
## mol/L, g, g/mol, L 
invisible(list(c=c, m=m, M=M, V=V)) 

} 

回答

2

您可能想看看BB软件包,特别是BBsolve()函数。 BBsolve会为您提供的方程式进行Newton-Raphson反演。正如它发生的那样:-),我编写并发布了一个函数“ktsolve”,它允许你输入一组方程和一些变量子集,并且它会返回其他变量的值。 (它的名字是为了纪念商业传统知识!求解器包)。如果你想尝试一下,你可以在http://witthoft.com/ktsolve.R(或http://witthoft.com/rtools.html)点击链接。

+0

听起来不错 - 你有一个简单的例子吗? – baptiste

+0

Baptiste:启动w/BBsolve帮助页面,然后尝试ktsolve.R函数标题中的示例函数。 #yfunc - 是如下形式的函数: #\t yfunc <-function(x)的{ #\t \tÝ<维矢量() #\t \t Y [1] < - F1(x)的 #\t \t Y [2] < - F2(x)的 #\t \t Y [长度(X)] < - FN(X) #\t \tý #\t \t} #\t其中,y [j]的被假人这将是驱动为零, #\t和x [j]是一个虚拟矢量,将填入'猜' #因此,例如:d = a + sqrt(b)和a = sin(a/b)+ g *的格式必须输入为y [j] < - f(x) exp(f * a)变成 #y [1] <-a-d + sqrt(b)和y [2] <-sin(a/b)+ g * exp(f * a)-a, –

+0

和...#和例如 #known < - list(a = 3,d = 5,g = .1)是固定参数,并且是BBsolve() –