2016-11-16 2 views
1

コードの末尾にあるn.Iマトリックスにforloopの出力データを格納しようとしていますが、出力マトリックスに問題があると確信しています。私には同じ値、0または1が与えられています。print(SS)が正しい値を出力しており、forloopが正常に動作していることがわかります。出力データのループ記憶用

マトリックスを修正する方法や、forloopからデータを保存できる方法についてアドバイスをお持ちの方はいらっしゃいますか?前もって感謝します!

c=0.2 
As=1  
d=1  
d0=0.5 
s=0.5 
e=0.1  
ERs=e/As  

C2 = c*As*exp(-d*s/d0)    

#Island States (Initial Probability)     
SS=0      


for(i in 1:5) { 
    if (SS > 0) { 
    if (runif(1, min = 0, max = 1) < ERs){ 
     SS = 0 
    } 
    } 
    else { 
    if (runif(1, min = 0, max = 1) < C2) { 
     SS = 1 
    } 
    } 
print(SS) 
} 
n.I=matrix(c(SS), nrow=i, ncol=1, byrow=TRUE) 

答えて

4

効率的なソリューションは、ループを使用しないことです。タスク全体を容易にベクトル化できるため、不要です。

Z =runif(100,0,1) 
as.integer(x <= Z) 
#[1] 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 
#[70] 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0

この機能が正確に何を意味するのか詳しく教えてください。 forループが生成していたもの(つまり、このように動作する)に似た値を与えているようです。私はまだRを学んでいて新しく、可能な限り人々がforloopsを使用するのを避けているように感じています。何故ですか?非常に感謝してローランド! –

+0

「はじめにRの紹介」をお読みください。これは一度に100のランダムな値を作成し、あなたのxの値をこれらすべてと一度に比較します。結果として得られる論理ベクトル(TRUE/FALSE値)は、(1/0値の)整数ベクトルに変換されます。ベクトル化とは、コンパイルされたコードでループが発生することを意味します。ベクトル化されたコードは、通常、この例がうまく説明するように、はるかに読みやすくなります。 – Roland

0

リストに保存できます。それほど効率的ではありませんが、仕事は終わります。 list [[1]]は、リストを取得したい場合にリストに保存された最初の要素を示します。

list_pos <- list() # create the list out of the for loop 
    for(i in 1:100) { 
    c=0.10 #colonization rate 
    A=10 #Area of all islands(km^2) 
    d=250 #Distance from host to target (A-T) 
    s=0.1 #magnitude of distance 
    d0=100 #Specific "half distance" for dispersal(km) 
    C1 = c*A*exp(-d/d0) #Mainland to Target colonization 
    Z =runif(1,0,1) 
    x <- C1*A 


    if(x <= Z) { 
      list_pos[[i]] <- print("1") # Here you can store the 1 results.print is actually not necessary. 
    } 
    if(x >= Z){ 
      list_pos[[i]] <- print("0") # Here you can store the 0 results.print is actually not necessary. 
    } 
} 
関連する問題