提供された情報ではテストできませんが、これは機能するはずです。
expGPA <- outer(relGPA, avgGPA, FUN=f) # See below for way to make this "work"
組み合わせを生成したい場合のもう 1 つの便利な関数はexpand.grid
、次のとおりです。これにより、「長い形式」が得られます。
expGPA2 <-expand.grid(relGPA, avgGPA)
expGPA2$fn <- apply(expGPA2, 1, f)
長い形式は、ラティスと ggplot が高レベルのプロットの入力形式として期待するものです。
編集: djhurio によって指摘され、Vectorize
戦略を使用して Sam Swift によって (解決された) 関数に列参照を渡すためのより具体的な方法を構築する必要がある場合があります。の場合apply
、sum
関数は上記のようにすぐに機能しますが、除算演算子は機能しないため、複数の引数を持つより複雑な関数に一般化できる別の例を次に示します。x
(残念ながら) 列名は引数に引き継がれないため、プログラマーが必要とするのは、「apply()」関数の適切な引数の列番号だけです。
> expGPA2$fn <- apply(expGPA2, 1, function(x) x[1]/x[2])
> str(expGPA2)
'data.frame': 48 obs. of 3 variables:
$ Var1: num -1.5 -1.3 -1.1 -0.9 -0.7 ...
$ Var2: num -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 ...
$ fn : num 0.75 0.65 0.55 0.45 0.35 ...
- attr(*, "out.attrs")=List of 2
..$ dim : int 16 3
..$ dimnames:List of 2
.. ..$ Var1: chr "Var1=-1.5" "Var1=-1.3" "Var1=-1.1" "Var1=-0.9" ...
.. ..$ Var2: chr "Var2=-2" "Var2= 0" "Var2= 2"
Edit2: (2013-01-05) 1 年後にこれを見て、SamSwift の関数は、本体に の代わりに "+" を使用することでベクトル化できることに気付きましたsum
。
1/(1+exp( relGPA*pred.model$coef[1] + avgGPA*pred.model$coef[2]) # all vectorized fns