2016-07-06 1 views
0

私は3次元の関数を持っており、3番目の変数に対して事前計算された線形補間の2次元テーブルを作成したいと思います。つまり、最初の2つの変数の値を指定すると、3番目の変数の線形補間をルックアップします。どのようにしてこれらの関数を保持し、索引付けできる多次元(この場合は2)のデータ構造を構築できますか。Rで多次元関数の配列を作る方法はありますか?

例えば、Idはそのような構造と対話したい:

a_func <-function (a, b, c) {...} 

for(x in 1:n) { 
    for(y in 1:m) { 
     some_structure[x][y] <- approxfun(seq(0,q,by=0.01), sapply(seq(0,q,by=0.01), FUN=a_func, a=y, b=x)) 
    } 
} 

some_structure[_x][_y](z) #and then index it like this 
+1

おそらくもっと具体的な例を挙げたいでしょう。 – Frank

+0

@フランク、どうですか? –

+0

Rの遅延評価のため、これは理想的なアプローチではないかもしれません。つまり、関数内で 'n'または' m'を使用した場合、関数は、割り当てられたときの値に関係なく、呼び出されたときに**現在の値**またはn/mを使用します。 –

答えて

1

これは行くには最もスペース効率のよい方法ではありませんが、これは、私は周りを取得する方法です奇妙な変数を複数の次元で保持する: これは、保持したい次元のリストを返す(何も保持しない)

list.arr <- function(dimensions) { 
    result <- list() 
    length(result) <- prod(dimensions) 
    dim(result) <- dimensions 
    return(result) 
    } 
lst[[x,y]] #you need to use double braces とあなたが割り当てすることができます:アクセスへ

lst[[x,y]] <- ANY_R_OBJECT

EDIT: これは実際にあなたがlst[[x]]を呼び出すときに、それだけで返すことを意味し、その上にディメンション属性を持つごく普通の1-Dのリストです行ではなくx番目の変数。あなたが行をしたい場合、あなたはまた、あなたが今names(lst)dimnames(lst)col.names(lst)row.names(lst)でオブジェクトに名前を付けることができlst[[x,]]

を呼び出す必要があります。

+0

これはよく見えます。この「怠惰な評価」の問題は何にしますか? –

+0

申し訳ありませんが、私はここであなたを助けてくれるとは思っていません。私はRがレイジーな評価をしていることは知っていますが、私はまだこのような問題にぶつからなかった...私はいくつかの簡単なコードを実行し、アウトプットとそれがうまくいくならあなたのやり方で続けてください。問題がある場合、それを回避するには、使用したい "indeces"のベクトルをマッチさせ、forループの本体をパラメータとして 'i'と' j'をとる関数にすることです – Adam

関連する問題