2017-02-28 40 views
0

這個頁面中的新功能。 我一直在使用這段代碼沒有成功。傳遞函數中的參數列表R

我有一個參數列表。

price<-seq(10,100,length=10) 

alfa<-seq(2,3,length=4) 

beta<-seq(0.1,0.2,length=4) 

名單是:

[[1]] 
[1] 10 20 30 40 50 60 70 80 90 100 

[[2]] 
[1] 2.000000 2.333333 2.666667 3.000000 

[[3]] 
[1] 0.1000000 0.1333333 0.1666667 0.2000000 

,我想什麼來是創建一個功能,每一個價格,做到以下幾點。我嘗試了lapply函數,但沒有結果。

price*beta[1]+alfa[1] 

price*beta[2]+alfa[2] 

price*beta[3]+alfa[3] 

price*beta[4]+alfa[4] 

謝謝!

+0

請分享你與'嘗試lapply()' – ottlngr

回答

0

你可以平時寫的功能lapply()函數像這樣的外:

price<-seq(10,100,length=10) 
alfa<-seq(2,3,length=4) 
beta<-seq(0.1,0.2,length=4) 

f <- function(price) c(price*beta[1]+alfa[1], price*beta[2]+alfa[2], price*beta[3]+alfa[3], price*beta[4]+alfa[4]) 

lapply(price, f) 

工作的呢?

1

請提供您的lapply代碼..

這裏多了一個辦法可以儘可能..代碼

pr <- function(){ 
new_val <- 0 

new_val <- price*alfa+beta 

return(new_val) 
} 

,如果你願意,你可以用這個。

0

這個更自然的函數是Mapply,它接受向量參數並將位置函數應用於元素。

mapply(function(x, y, price) (price * y) + x, alfa, beta, 
     MoreArgs=list("price"=price), SIMPLIFY=FALSE) 
[[1]] 
[1] 3 4 5 6 7 8 9 10 11 12 

[[2]] 
[1] 3.666667 5.000000 6.333333 7.666667 9.000000 10.333333 11.666667 13.000000 14.333333 15.666667 

[[3]] 
[1] 4.333333 6.000000 7.666667 9.333333 11.000000 12.666667 14.333333 16.000000 17.666667 19.333333 

[[4]] 
[1] 5 7 9 11 13 15 17 19 21 23 

這裏,MoreArgs參數用於將泛型函數的價格作爲向量進行提供,而不是逐個元素。你也可以使用包裝器mapplyMap它總是返回一個列表。這否定了需要對SIMPLIFY參數:

Map(function(x, y, price) (price * y) + x, alfa, beta, MoreArgs=list(price=price)) 
[[1]] 
[1] 3 4 5 6 7 8 9 10 11 12 

[[2]] 
[1] 3.666667 5.000000 6.333333 7.666667 9.000000 10.333333 11.666667 13.000000 14.333333 15.666667 

[[3]] 
[1] 4.333333 6.000000 7.666667 9.333333 11.000000 12.666667 14.333333 16.000000 17.666667 19.333333 

[[4]] 
[1] 5 7 9 11 13 15 17 19 21 23 
+0

好極了!謝謝 – Diego