2011-12-06 10 views
0
FUNC <- function(i){ 
var <- i 
dist <- sapply(1:(i-1),function(x){list[[x]]*co[var,x]}) 
mean <- sapply(1:(i-1),FUN2) 
block <- t(co[i,i]*list[[i]])+rowSums(mean) 
new_list[[i]] <- t(block) 
} 

i = 4またはi = 10と指定して、関数定義内で行ごとにコードを実行すると、 new_list[[i]]に値t(block)を割り当てます。 は、しかし、私は関数は、指定されたiで1行ずつうまく実行されますが、関数呼び出しでは機能しません。

FUNC(4) or FUNC(10) 

を行う場合には、エラーメッセージ

Error in dist[[x]] : subscript out of bounds 

を返す誰もが、それは関数呼び出しでは動作しませんなぜ任意のアイデアを持っていますか? ありがとうございます!

+0

未定義のオブジェクトがいくつかあります。これは非常に困難な作業に役立ちます。ここで使用しているプログラミングスタイルは非常に奇妙です。いくつかのサンプルデータで質問を更新し、英語で何を達成しようとしているのか説明できますか?私はあなたがここでやっていることを達成するためのはるかに効率的な方法があると思います。 FWIW、あなたのコードを 'FUNC(4)'として実行しようとすると、 '[in:リスト[[x]]のエラー:タイプ 'builtin'のオブジェクトがサブセット化できません。 – Chase

+0

また、 'co'が何であるか、' FUN2'とは何か、new_listがどこにどのように定義されているのかわかりません.... –

+0

[関数呼び出し内の代入は一時的です](http:// cran .r-project.org/doc/manuals/R-intro.html#割り当て機能内) – Gregor

答えて

3

あなたのFUN2機能がdistを使用していると思われます。しかしdistFUNCがローカルなので、FUN2はそれを見つけることができません。代わりに、グローバルワークスペース内のワークスペースを使用しますが、これはおそらく短すぎます。だからあなたはそのエラーメッセージを受け取ります。

あなたは本当に、彼らは任意のグローバル変数を使用しないでくださいFUNCFUN2の両方を変更する必要があります(codistlistnew_list - あまりにも、おそらくFUN2FUNCの引数することができます)。

...しかし、少なくとも変更FUN2引数としてdistを取るために:このコードは、あなたの周りに維持したい何かがある場合

FUN2 <- function(i, dist) { 
    # Your code here... 
} 

# In FUNC: Pass dist to FUN2 
mean <- sapply(1:(i-1),FUN2, dist=dist) 

...そして、あなたは本当に機能を与えることを検討すべきですより具体的な名前...

+0

ありがとうございました!私はそれが問題だと思う。私が提供したことからするのは難しいことは分かっていますが、これを行うための効率的な方法はありますか?リストには10​​00以上の要素があり、コードを実行するには永遠にかかる。ありがとう – GstarDiesel

+2

@MillyVanilli - よく、あなたの質問を、全体的な目標が何であり、どのようなFUN2のように見せてください! ...いくつかのサンプルデータも素晴らしいでしょう。その小さな情報からそれを見つけ出すことができるためには、 – Tommy

+3

+1です。 –

関連する問題