0

この質問が一見抽象的である場合はお詫び申し上げます。私はそれを明確な光の中で提示するために多大な努力をしました.

の長さのS(n,L)エントリを持つベクトルのセットとします。{0,1,2,...,n}LS(1,2) = {0,0|0,1|1,0|1,1}S(5,1) = {0|1|2|3|4|5}

F要素を取り込んS(n,L)で 0 から 100 までの実数を出力する関数があります。

0 から 100 までの実数が与えられた場合、「適度に小さい」およびrの次のセットをどのように決定できるかを知りたいです。nl

S'(n,L,r) = {v in S(n,L)| F(v) >= r}

これまでにできたのはS(n,L)、次のコードを使用して生成することだけです。

f = function(n,L){

h = rep(list(0:n),L)

do.call(expand.grid,h)}

私はRでこの種のものに非常に慣れていないので、どんな助けでも大歓迎です。乾杯

編集:あいまいさを避けるためlにに変更されました。L

4

2 に答える 2

2

私はこれがうまくいくと思います:

# Test values
n<-6
l<-3
r<-0

S.n.l<-f(n,l) # Generate the series
F<-function(x) rnorm(1) # Your function is more complicated
S.n.l [apply(S.n.l,1,F) >= r,] # Check if any value exceeds r and return.

しかし、Fがベクトル化されている場合、 は必要なくapply、関数ははるかに高速になります。たとえば、単純に値を合計すると、すべてを一度にF計算できます。F(S.n.l)

于 2013-01-02T19:50:14.743 に答える
0

最初に説明するのは、セットの順列と呼ばれます。Rで、を使用foo<- 0:nしてソースベクトルを作成します。 expand.grid大丈夫です-plyrパッケージには、より高速に実行されるツールが含まれている場合があります。

一方、関数Fがこれらの値で実際に何をするかは重要です。ランダムな順列が必要な場合は sample、呼び出されるたびにランダムに選択された順列が表示されます。毎回セット全体を作成する必要はありません。考えられるすべての順列に対して実行する必要がある場合F(おそらく1回だけ!)、比較的大きなデータオブジェクトを作成するよりも、順列をループする方がよいでしょう。

于 2013-01-02T19:54:34.737 に答える