2016-03-01 70 views
1

我有這個參數:R:如何爲函數中的一系列數據創建一個循環?

L_inf <- seq(17,20,by=0.1) 

這個功能:

fun <- function(x){ 
    L_inf*(1-exp(-B*(x-0)))} 

我會應用此功能的一系列的L_inf值。 我試圖與循環for,像這樣:

A <- matrix() # maybe 10 col and 31 row or vice versa 
for (i in L_inf){ 
A[i] <- fun(1:10) 
} 

伯爾 - [R迴應:longer object length is not a multiple of shorter object length。 對於向量L_inf(長度= 31)的每個值,我的預期輸出是一個矩陣(或數據幀,或可能是列表),其結果爲10(fun(1:10))。 如何做到這一點?

回答

3

您試圖將10個元素的矢量放入其中一個矩陣單元格中。您想要將其分配給矩陣行(您可以使用A[i,]訪問第i行)。

但是在這種情況下使用for循環效率不高,使用其中一個「apply」函數非常簡單。 Apply函數通常會返回一個列表(由於基本沒有約束,因此它是最通用的容器)。

這裏sapply是一個應用功能,它試圖S暗示其結果到一個方便的數據結構。在這種情況下,由於所有結果具有相同的長度(10),因此sapply將結果簡化爲矩陣。

請注意,我修改了您的函數,使其明確依賴於L_inf。否則,它不會做你認爲應該做的事情(如果你想了解更多信息,請參閱關鍵字「閉包」)。

L_inf_range <- seq(17,20,by=0.1) 
B <- 1 

fun <- function(x, L_inf) { 
    L_inf*(1-exp(-B*(x-0))) 
} 

sapply(L_inf_range, function(L) fun(1:10, L_inf=L)) 
相關問題