2017-08-11 3 views
0

zu übergeben Ich möchte e^(ax+b) over a=-1:1 und b=-1:1 für verschiedene Werte von X berechnen. Ich möchte die Ausgabe in Form einer Liste von 5 Elementen. Jedes Element in der Liste ist 3x3 Matrix.Versuchen, mehr als 2 Vektoren zu einer Funktion in R

Ich habe dies mit Outer und Vectorize erreichen. Jetzt

sigm = function(a=0,b=0,x){ 
return(exp(x*a+b)) 
} 

sigm1 = Vectorize(function(a=-1:1,b=-1:1,x){ 

outer(a,b,sigm,x) 
},SIMPLIFY = FALSE) 

, gibt sigm1(x=1:3) die erforderliche Ausgabe

[[1]] 
     [,1]  [,2]  [,3] 
[1,] 0.1353353 0.3678794 1.000000 
[2,] 0.3678794 1.0000000 2.718282 
[3,] 1.0000000 2.7182818 7.389056 

[[2]] 
     [,1]  [,2]  [,3] 
[1,] 0.04978707 0.1353353 0.3678794 
[2,] 0.36787944 1.0000000 2.7182818 
[3,] 2.71828183 7.3890561 20.0855369 

[[3]] 
     [,1]  [,2]  [,3] 
[1,] 0.01831564 0.04978707 0.1353353 
[2,] 0.36787944 1.00000000 2.7182818 
[3,] 7.38905610 20.08553692 54.5981500 

Der einzige mit diesem Code-Schnipsel zurückziehen wird, ich bin die Standardwerte von a=-1:1 und b=-1:1 verwenden. Wenn ich versuche, während des Funktionsaufrufs dasselbe zu tun, geht es drunter und drüber. Z.B.

Ich bin nicht in der Lage herauszufinden, warum die Übergabe der Argumente diesen Unterschied macht.

+1

Sie müssen wahrscheinlich das 'X' Argument nennen. Nicht benannte Argumente in R werden nach Position übergeben. Sie könnten diese Funktion auch so umschreiben, dass 'x' das erste Argument ist. –

+0

Ich überprüfte mit diesem Code 'sigm1 (a = -1: 1, b = -1: 1, x = 1: 3)'; funktioniert immer noch nicht – kasa

Antwort

4

In diesem Fall sollten Sie nur die Variable x vektorisieren.

sigm1 = Vectorize(function(a=-1:1,b=-1:1,x){ 
        outer(a,b,sigm,x)}, vectorize.args = "x" ,SIMPLIFY = FALSE) 

Dann sigm1(-1:1,-1:1,1:3) Willen läuft gibt das gewünschte Ergebnis.

2

Wir können nur lapply verwenden und nicht Vectorize brauchen überhaupt:

lapply(x, function(x) outer(a, b, sigm, x = x)) 

geben:

[[1]] 
      [,1]  [,2]  [,3] 
[1,] 0.1353353 0.3678794 1.000000 
[2,] 0.3678794 1.0000000 2.718282 
[3,] 1.0000000 2.7182818 7.389056 

[[2]] 
      [,1]  [,2]  [,3] 
[1,] 0.04978707 0.1353353 0.3678794 
[2,] 0.36787944 1.0000000 2.7182818 
[3,] 2.71828183 7.3890561 20.0855369 

[[3]] 
      [,1]  [,2]  [,3] 
[1,] 0.01831564 0.04978707 0.1353353 
[2,] 0.36787944 1.00000000 2.7182818 
[3,] 7.38905610 20.08553692 54.5981500 
Verwandte Themen