2011-08-26 38 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() –