2017-02-28 10 views
0

に渡すこのページでは新しいものがあります。 私はこのコードを使って成功していません。関数内のパラメータのリストをR

私は、パラメータのリストを持っています。

[[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 

と私はにしたいことは、それぞれの価格のために、次の操作を行い、関数を作成することです:

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

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

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

リストです。私は結果のないlapply関数を試してみました。

price*beta[1]+alfa[1] 

price*beta[2]+alfa[2] 

price*beta[3]+alfa[3] 

price*beta[4]+alfa[4] 

ありがとうございます!

+0

あなたは() ' – 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

優秀lapply'と試みたものを共有して下さい!ありがとうございました – Diego

関連する問題