2016-09-01 6 views
1

多変数関数を定義し、ベクトルの要素を変数の値とするベクトルの配列に対して演算を行いたいと思います。そして、配列を関数の出力の配列で置き換えます。 2変数バージョンの場合、outer(またはouter + Vectorize)は正常に動作します。しかし、高次元では、きれいで透明なものを思いつくことはできません。Rのベクトル配列上で動作する多変数関数

2変数(2次元)の例を使用しますが、これに限定されない解決策に興味があります。

は、例えば、温度および時間のベクトルを定義し:

temp=seq(10,50,10) 
time=seq(5,10,1) 

これは出力30行によるの配列であるexpand.grid

arrayInput <- expand.grid(temp=seq(10,50,10), time=seq(5,10,1)) 

を使用してアレイを構築するために使用することができます2列。温度と時間の関数を定義できるようになりました。私は何をしたいが、それはX 2次元5 X 6の配列になるようにarrayInputを再配置し、与えられた関数の値の5 X 6の配列を生成するために、FUNCと、この配列を操作している

func <- function(temp, time) time*exp(-1/temp) 

入力のペア、温度と時間。

このようなものは、Mathematicaで簡単に適用できます。私はRでこれを行ういくつかの方法を見つけましたが、それらは醜いです。変数の名前などを保持しないでください。コードが何をしているのかがはっきりしません。

誰でもこれを達成する良い方法を知っていますか?私が言ったように、もし私が5変数の関数を持っていれば、私は同じように操作を実行できるようにしたいと思います。あなたがこれを行うことができます

おかげで、

スティーブ

+0

素晴らしい機能の1つは「外側」です。私はこれがあなたの望む出力を計算すると思っていますが、入力はちょうど初期ベクトルです: 'outer(seq(10,50,10)、seq(5,10,1)、function(temp、time)time * exp(-1/temp)) ' – lmo

+0

ありがとう、私は最初の段落で外側を述べた、それはいいです、そして、おそらく私はこれを高次元の外側(outer())に拡張することができます。 – SteveK

+0

誰かがここで 'multi.outer'関数でクラックを起こしました: http://stackoverflow.com/questions/6192848/how-to-generalize-outer-to-n-dimensions – SteveK

答えて

1

:あなたがここに配列を使用する必要がある理由

dim(matInput) <- c(5, 6, 2) 
#or matInput <- array(matInput, dim = c(5, 6, 2)) 

func(matInput[,,1], matInput[,,2]) 
#   [,1]  [,2]  [,3]  [,4]  [,5]  [,6] 
#[1,] 4.524187 5.429025 6.333862 7.238699 8.143537 9.048374 
#[2,] 4.756147 5.707377 6.658606 7.609835 8.561065 9.512294 
#[3,] 4.836081 5.803297 6.770513 7.737729 8.704945 9.672161 
#[4,] 4.876550 5.851859 6.827169 7.802479 8.777789 9.753099 
#[5,] 4.900993 5.881192 6.861391 7.841589 8.821788 9.801987 

はしかし、私は理解していません。ほかの人と同様にdata.frameを使用します。 RはMatlabではありません。

+0

ありがとう。私はあなたが最初の行にあるものをdata.frameで正確にやろうとしました: > dfInput < - expand.grid(temp = seq(10,50,10)、time = seq(5,10,1) ) dim(dfInput)< - c(5,6,2) dim(dfInput)< - c(5,6,2)のエラー: dims [product 60]がオブジェクトの長さと一致しません[2] 配列やMathematica(Matlabではなく)には何も付いていませんが、これは10年で使用していません。私はRをよく知っていません。ソリューションに感謝します。私は、2つの構成要素の違いを理解する必要があります(data.matrixをラッピングする場合としない場合)。 – SteveK

関連する問題