2012-08-14 5 views
16

関数がf<- function(x,y,z) { ... }であるとします。どのように定数を1つの引数に渡すことになりますが、他の引数は変えるのですか?言い換えれば、私はこのような何かをしたいと思います:outer()を多変数関数で使用する

output <- outer(x,y,f(x,y,z=2)) 

このコードは評価しませんが、これを行う方法はありますか?機能後

+1

あなたは私が頻繁にdo.call(lapply、C(expand.grid(x、y)は、リスト(F))) ''でこの種のものを行ってきたが実現、何を知っているが、 「外側」はdefinatelly良く、より読みやすいです。 – Backlin

答えて

18
outer(x, y, f, z=2) 

引数は?outer...を参照してください、それに追加の引数です。この構文はRで非常に一般的です。applyファミリはすべて同じように動作します。

更新:

私はあなたがあなたのフォローアップの質問に達成したいが、このフォーム上の解決策は、あなたが使用する必要がありますおそらく何だと思うかを正確に伝えることはできません。

outer(sigma_int, theta_int, function(s,t) 
    dmvnorm(y, rep(0, n), y_mat(n, lambda, t, s))) 

これは、sigma_inttheta_intの値の組み合わせごとに分散行列を計算dennsityを定義するために、その行列を使用し、yで定義された点(S)にそれを評価します。私はそれをテストすることができませんでしたが、変数の種類と次元がわからないので、私はそれをテストすることができませんでした。

+0

ああ、それはとてもシンプルですが、私はRについて多く知っています。 – Stijn

+0

はい、それは簡単です...あなたがそれを知っていれば); – Backlin

+0

もう一度お悔やみしますが、別の機能に依存している機能があればどうなりますか?たとえば、2つの区間があり、これらの区間のうち2つの要素について、(i)関連する分散行列を作成し、(ii)この時点の密度(多変量正規分布)を計算したいとします。分散行列を作成するために、私は関数y_mat(n、lambda、theta、sigma)を持っています。与えられた2つの区間sigma_intとtheta_intは、z < - outer(sigma_int、theta_int、dmvnorm、x = y、mean = rep(0、n)、sigma = y_mat(n、lambda、theta、sigma)これは可能ですか? – Stijn

2

outer(適用ファンクションのファミリおよび他のものとともに)は、それらが呼び出す関数に余分な引数を渡します。ただし、これがサポートされていないケース(optimがその一例です)では、より一般的なカレー化手法を使用することができます。関数をカレーするには、(いくつかの)変数が固定されているため、より少ないパラメータしか持たない新しい関数を作成することです。

library("functional") 
output <- outer(x,y,Curry(f,z=2)) 
関連する問題