0

これを行うにはもっとエレガントな方法があるかもしれませんが、今はこのロジックを理解したいだけです...私の問題は、Y[t]=Y[t-1]+i[t]シミュレーションの典型的なことを行うと、関数に入れても機能しないことです。時間または t 1-10 の各行に正しい変数値を含むデータ フレームを出力したいと考えています。ループ内の猫は、私が間違っていることを明らかにします。

これが私のコードです:

iter <- 10; i <- rep(0.1,iter);  
i <- c(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0)
Y0 <- 0.25 ; O0 <- 4.16 
Y <- rep(0,iter); O <- rep(0,iter) 
Tot <- rep(0,iter)
t <- seq(1,iter) #start time and fill vector
Y[1]=Y0 #First iter
O[1]=O0
Tot[1]= Y0+O0
time<-rep(1,iter)#runtime unit

#This is a simplified version of the ICBM function, to test the logic and output
Isim <- function(i, h, Y0, O0,iter,time) {
  for (t in 2:iter) {
    time<- time+1
    Y[t]=(Y[t-1]+i[t-1]); O[t]=(O[t-1]+i[t-1]); Tot[t]=Y[t]+O[t];
    simout <- data.frame(i,Y0,O0,Y,O,Tot,time)
    cat(time)
  } 
  return(simout)
}

result <- Isim(i, h, Y0, O0,iter, time)
4

2 に答える 2

0

ループでは、代わりに..time<- time+1を使用してみてください。time[t] <- t

各反復でインクリメントtimeすると、ベクトルで終了します。1

    time
    [1] 10 10 10 10 10 10 10 10 10 10

これは の最終入力ですsimout

simout$timeは、各反復で次のように変更されます。

    2 2 2 2 ... 
    3 3 3 3 ...
    ...
    10 10 10 ...

timeそのため、各反復で特定の要素のみを変更する必要があります。

現在 ( から確認できますcat)は次のようにsimout$time変更されます。

    1 1 1 1 ...
    1 2 1 1 ...
    1 2 3 1 ...
    ...
    1 2 3 4 5 6 7 8 9 10 #this is the final input in "simout"
于 2013-10-13T10:33:57.113 に答える