2017-02-28 4 views
0

Ich bin neu auf dieser Seite. Ich habe mit diesem Code ohne Erfolg gearbeitet.Übergeben der Liste der Parameter in einer Funktion in R

Ich habe eine Liste von Parametern.

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

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

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

die Liste ist:

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

und was ich will, ist, eine Funktion zu erstellen, die für jeden Preis, gehen Sie wie folgt. Ich habe es mit der Funktion platt gemacht, ohne Ergebnisse.

price*beta[1]+alfa[1] 

price*beta[2]+alfa[2] 

price*beta[3]+alfa[3] 

price*beta[4]+alfa[4] 

Vielen Dank!

+0

Bitte teilen, was Sie versucht, mit 'lapply()' – ottlngr

Antwort

0

Sie können in der Regel die Funktion außerhalb der lapply() Funktion wie folgt schreiben:

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) 

funktionierts?

1

Bitte geben Sie Ihre lapply Code ..

hier eine weitere Möglichkeit, möglich ist .. Code ist

pr <- function(){ 
new_val <- 0 

new_val <- price*alfa+beta 

return(new_val) 
} 

wenn Sie möchten, können dies nutzen.

0

Eine natürlichere Funktion dafür ist Mapply, die Vektorargumente einnimmt und eine Funktion auf Elemente nach Position anwendet.

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 

Hier wird das MoreArgs Argument verwendet, um die generische Funktion Preis als Vektor zu füttern, anstatt Element für Element. Sie können auch den Wrapper für mapply, Map verwenden, der immer eine Liste zurückgibt. Dies negiert die Notwendigkeit für die SIMPLIFY Argument:

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

Excellent! Danke – Diego

Verwandte Themen